2. while 命令
while 命令用户创建一个循环运行一组命令(命令块)的结构,会根据执行 测试命令 的测试结果(即退出状态)来决定是否重复执行 命令块。如果测试结果为真则继续执行命令块,当测试结果为假(即退出状态为非零值)时终止循环。
官方语法
while COMMANDS; do COMMANDS-2; done
COMMANDS 后面的分号 ; 表示 命令的终止符,如果后面 do 写在新的一行内,则 分号; 可以省略。
将上述一行整理成多行,并用中文表达需要填充的部分,即成为如下语法:
语法格式:
while 测试命令; do
命令块;
done
或
while 测试命令
do
命令块;
done
语法说明:
while、do、done是关键字。do用于标记命令块的开始,done用于标记命令块的结束。
while命令执行过程说明:
- 先执行测试命令,根据测试命令的退出状态来决定是否执行命令块。
- 如果测试命令的退出状态为假值(非零值)则直接退出此 while 命令,while 循环执行结束。
- 如果测试命令的退出状态为真值(零
0)则执行命令块部分的命令。然后回到第一步,再执行测试命令。
示例:
循环打印 1 到 10 的整数。每一行打印一个数字。
写一个 Shell 程序 test_while.sh,内容如下:
#!/bin/bash
count=1
while [ $count -le 10 ]
do
echo "$count"
count=$(expr $count + 1)
done
运行结果
weimingze@mzstudio:~$ bash test_while.sh
1
2
3
4
5
6
7
8
9
10
示例2:
循环读取键盘输入的内容。当直接回车时结束输入,打印输入文字的行数并打印每一行输入的内容。
编写一个 Shell 程序 test_while2.sh,内容如下:
#!/bin/bash
count=0
content=""
while read -p '请输入一行文字,直接回车结束输入: ' line && [ `expr length "$line"` -ne 0 ]
do
count=$(expr $count + 1)
content=${content}${line}
done
echo "你输入了 $count 行文字!"
echo "内容是:" $content
运行结果:
weimingze@mzstudio:~$ bash test_while2.sh
请输入一行文字,直接回车结束输入: hello shell
请输入一行文字,直接回车结束输入: bye
请输入一行文字,直接回车结束输入:
你输入了 2 行文字!
内容是: hello shellbye
退出状态
while 命令的退出状态是内部最后执行的一条命令的退出状态。
练习:
- 写一个 Shell 脚本程序
sum_m2n.sh,此程序要求输入一个开始的整数 begin,输入一个结束的整数 end。使用 while 循环 计算 begin 到 end 所有整数的和并打印出来。如:
$ source sum_m2n.sh
please input begin number:
1
please input end number:
100
RESULT: 5050