控制结构之for循环
语法格式
for 变量 in 列表;do #for循环会遍历整个列表,并将列表中的每一个值依次赋值给变量
循环体
done
之前介绍的for循环的格式形如:
for VARNAME in list;do
statement
...
done
这种格式的for循环是将list中的每一个依次值赋值给变量VARNAME,然后在执行循环体中的语句。当这个list中的没有值复制给变量VARNAME时,该循环也就结束了。
在这里我们在介绍一种类似c语言的for循环
语法格式形如:
for ((expre1;expre2;expre3));do //注意for关键字和小括号有空格
statement
...
done
其中小括号内有3个表达式,每个表达式用";"隔开
其中expre1一般为初始化变量用的,可以省略
expre2为控制条件,也就是说符合该条件的则执行循环体;不符合的则退出循环体
expre3为用于修改变量的值,也可以省略。
这种for循环的工作机制是:首先判断expre1中的变量是否符合expre2;符合则执行循环体中的语句;不符合则退出。如果符合在执行expre3,此时变量的值会发生改变,然后在判断改变的值是否符合expre2,符合则执行循环体中的语句,不符合则退出;依次类推,来完成整个循环过程。
其中NUM为expre1,可以省略,也可以在循环体外部声明
NUM<=105是expre2,为控制条件,该条件决定了循环次数
NUM++是expre3,用来修改变量的值
控制结构之until循环
之前我们谈到的while循环,它是当expression成立时,则执行循环体中的语句;不成立时则退出循环体中的语句。而我们的until刚好相反,当expression不成立时,则执行循环体中的语句;expression成立时则退出循环。
语法格式为:
until expression;do
statement
...
done
另一种脚本实现方式
#!/bin/bash
#
D1='/dev/sdb'
fdisk -l | grep -o '^Disk /dev/sd[a-z]' | awk '{print $2}'
read -p "Please choice a fdisk:" DS
while [ $DS != $D1 ];do
if [ $DS == 'quit' ];then
exit 7
else
read -p "Please choice a fdisk:" DS
fi
done
read -p "jie xia lai de caozuo hui sunhuai shuju,hai yao jixu ma ?(y/n):" YS
until [ $YS == 'n' ];do
if [ $YS == 'y' ];then
for i in `seq 1 3`;do
mount | grep $D1$i &> /dev/null
fuser -km $D1$i &> /dev/null
umount $D1$i
done
dd if=/dev/zero of=$D1 bs=512 count=1 &> /dev/null
sync
sleep 3
echo '
n
p
1
+100M
n
p
2
+200M
n
p
3
+200M
t
3
82
w
' | fdisk $D1 &> /dev/null
partprobe $D1
mke2fs -j ${D1}1 &> /dev/null
sleep 2
mke2fs -j ${D1}2 &> /dev/null
sleep 2
mke2fs -j ${D1}3 &> /dev/null
sleep 2
mkdir -pv /fd{1,2,3} &> /dev/null
mount -t ext3 ${D1}1 /fd1
mount -t ext3 ${D1}2 /fd2
mount -t ext3 ${D1}3 /fd3
exit 0
else
read -p "input y/n:" YS
fi
done