自己抄书用于记忆的,可能会加点自己写的东西
18.8 使用break和continue控制循环
有时需要基于某些准则退出循环或跳过循环步
shell提供两个命令实现此功能
break和continue
18.8.1 break
break命令允许跳出循环
break通常在进行一些处理后退出循环或case语句
如果是在一个嵌入循环里,可以指定跳出的循环个数
例如如果在两层循环内,用break 2刚好跳出整个循环
18.8.2 跳出case语句
#下面的例子中
#脚本进入死循环直至用户输入数字大于5
#要跳出这个循环,返回到shell提示符下,break使用脚本如下
$ pg breakout
#!/bin/bash
while :
do
echo -n "Enter any number[1..5]"
read ANS
case $ANS in
1|2|3|5) echo "great you entered a number between 1 and 5"
;;
*) echo "Wrong number..bye"
break
esac
done
18.8.3 continue
continue命令类似于break命令,只有一点重要差别,它不会跳出循环,只是跳出这个循环步
18.8.4 浏览文件行
#下面是一个前面用过的人人文件列表,但是现在加入了一些头信息
$ pg names2.txt
------LISTING OF PERSONMEL FILE------
-------- TAKEN AS AT 06/1999 --------
Louise Conrad:Accounts:ACC8987
Peter James:Payroll:PR489
Fred Terms:Customer:CUS012
James Lenod:Accounts:ACC887
Frank Pavely:Payroll:PR489
#假定现在需要处理此文件,看过文件之后知道头两行并不包含个人信息,因此需要跳过这两行
#也不需要处理雇员Peter James,这个人已经离开公司,但没有从人员文件中删除
#对于头信息
#只需简单计算所读行数,当行数大于2时开始处理,如果处理人员名字为Peter James,也将跳过此纪录
$ pg whilecontinue
#!/bin/bash
SAVEDIFS=$IFS
IFS=:
INPUT_FILE=names2.txt
NAME_HOLD="Peter James"
LINE_NO=0
if [ -s $INPUT_FILE ];then
while read NAME DEPT ID
do
LINE_NO=`expr $LINE_NO + 1`
if [ "$LINE_NO" -le 2 ];then
continue
fi
if [ "$NAME" = "$NAME_HOLD" ];then
continue
else
echo "Now processing...$NAME $DEPT $ID"
fi
done < $INPUT_FILE
IFS=$SAVEDIFS
else
echo "`basename $0`:Sorry file not found or there is no data in the file" >&2
exit 1
fi
#运行上面脚本,得出
$ whilecontinue
Louise Conrad Accounts ACC8987
Fred Terms Customer CUS012
James Lenod Accounts ACC887
Frank Pavely Payroll PR489
|