For循环语句非常适用于列表对象无规律,且列表来源已固定(如某个列表文件)的场合。而对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,则更适合适用while循环语句。
While语句的结构
使用while循环语句时,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足时为止。在脚本应用中,应该避免出现死循环的情况,否则后边的命令操作将无法执行。因此循环体内的命令序列中应该包含修改测试条件的语句。以便在适当的时候使测试条件不再成立,从而结束循环。
while 条件测试操作
do
命令序列
done
while语句的执行流程:首先判断while后的条件测试操作结果,如果条件成立,则执行do。。。done循环体中的命令序列;返回while后再次判断条件测试结果,如果条件依然成立,则继续执行循环体;再次返回后到while后,再次判断。。。。如此循环。直到while后的条件测试结果不在成立为止。最后跳至done语句,表示结束循环。
使用while循环语句时,有两个特殊的条件测试操作,即true(真)和false(假)。使用true作为条件时,表示条件永远成立,循环体内的命令序列将无限执行下去,除非强制终止脚本。反之,若使用false作为条件,则循环体将不会被执行。
事例1:
批量添加规律编号的用户:添加包含固定的前缀字串,并按照顺序依次进行编号的账号。(名称依次为stu1。。。。。stu10)。
#vi while1.sh
#!/bin/bash
prefix=‘stu’
i=1
while [ $i -le 10 ]
do
useradd
p
r
e
f
i
x
{prefix}
prefixi
echo “123” | passwd --stdin
p
r
e
f
i
x
{prefix}
prefixi &> /dev/null
let i++
done
解释:上述脚本中,使用变量i来控制用户名称的编号,初始赋值为1,并且当取值大于10时终止循环。在循环体内部,通过语句“let i++”(等同于i=‘expr KaTeX parse error: Expected 'EOF', got '#' at position 186: …户的猜测次数和实际价格。** #̲vi cai.sh #!/bi…(expr $RANDOM % 1000)
TIMES=0
echo “商品实际价格范围为0~999,猜猜是多少?”
while true
do
read -p “请输入你的猜测价格数目:” INT
let TIMES++
if [ $INT -eq
P
R
I
C
E
]
;
t
h
e
n
e
c
h
o
"
恭
喜
你
,
猜
对
了
,
实
际
价
格
是
PRICE ]; then echo "恭喜你,猜对了,实际价格是
PRICE];thenecho"恭喜你,猜对了,实际价格是PRICE"
echo “你总共猜测了$TIMES次”
exit 0
elif [ $INT -gt $PRICE ]; then
echo “太高了”
else
echo “太低了”
fi
done
解释:通过环境变量RANDOM可获得一个2的16次方的随机整数,计算其与1000的余数即可获得0~999的随机价格;反复猜测操作使用true作为测试条件的while循环实现,当用户实际价格猜对时终止循环;判断猜测价格使用if语句实现,嵌套在while循环体内;使用变量来记录猜测次数。