写一个脚本(前提:请为虚拟机新增一块硬盘,假设它为/dev/sdb0),为指定硬盘创建分区
①列出当前系统上所有的硬盘,让用户选择,

    如果选择quit则退出脚本;如果用户选择错误,就让用户重新选择
②当用户选择后,提醒用户确认接下来的操作可能会损坏数据,并请用户确认;

    如果用户选择y就继续,n就退出,否则,让用户重新选择
③抹除那块硬盘上的所有分区,(提示:抹除所有分区后执行sync命令,并让脚本睡眠3s后再分区);

并为其创建三个主分区,第一个为20M,第二个512M,第三位128M(Swap类型),

最后三个分别格式化为ext3,ext3,swap

(提示1:将分区命令通过echo传送给fdisk即可实现,睡眠3s: sleep 3)
(提示2:抹除所有分区dd if=/dev/zero of=/dev/sdb bs=512 count=1)


以下是标准脚本,参照着标准脚本来,还是不行. T_T

#!/bin/bash
#

#初始化分区

echo "Initial a disk..." 
echo -e "\033[31mWaring...\033[0m"
#列出当前系统上所有的硬盘,让用户选择read -p "Choice a disk:" DISK

fdisk -l 2> /dev/null | grep -o "^Disk /dev/sd[a-z]"

#如果选择quit则退出脚本

if [ $DISK == 'quit' ]; then
    echo "Quitting.."
    exit 5
fi

#如果用户选择错误,就让用户重新选择

#第三个管道 最后在变量DISK后多加一个$是什么意思,第三个管道的意思其实都不太理解

#这一层的意思是,除非你输入的是/dev/sdb之类的,不然就提醒你选择错误,重新选择一个分区

until fdisk -l 2> /dev/null | grep -o "Disk /dev/sd[a-z]" | grep "^Disk $DISK$" &> /dev/null; do
    read -p "Waring option,choice again...:" DISK
done
#当用户选择后,提醒用户确认接下来的操作可能会损坏数据,并请用户确认

read -p "Will destory all data,continue(y/n):" CHOICE
#如果用户不是选择y/n,就让用户重新选择

until [ $CHOICE == 'y' -o $CHOICE == 'n' ]; do
    read -p "Will destory all data ,continue(y/n):" CHOICE
done

#如果用户选择y就继续,n就非法退出,

if [ $CHOICE == 'n' ]; then
    echo "Quitting..."
    exit4
else

#抹除那块硬盘上的所有分区,然后执行sync命令,并让脚本睡眠3s后再分区)

dd if=/dev/zero of=$DISK bs=512 count=1
sync
sleep 3

#分区过程通过管道送到fdisk 下

echo 'n
p
1

+20M
n
p
2

+512M
n
p

+128M
t
3
82
w' | fdisk $DISK &> /dev/null

#重新读取分区,防止脚本执行过快,先睡眠3s再格式化

partprobe $DISK
sync
sleep 2

#最后三个分别格式化为ext3,ext3,swap

mke2fs -j ${DISK}1 &> /dev/null
mke2fs -j ${DISK}2 &> /dev/null
mkswap ${DISK}3 &> /dev/null
fi

如下是正确执行结果,分区和格式化的信息不需要输出到屏幕上

2016-9-22 困扰两天之用脚本分区_分区

最后创建分区并格式化完成,即可挂载使用

2016-9-22 困扰两天之用脚本分区_虚拟机_02


然而这段脚本在我的本本上是错误的,结果是这样 T_T,肿么办???

2016-9-22 困扰两天之用脚本分区_分区_03

求大神某天路过我的博客可以提出宝贵意见!!!!!!