循环控制语句

时间:2021-12-07 01:26:46

continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层

格式:

while CONDITION1; do
CMD1
...
if CONDITION2; then
continue
fi
CMDn
...
done

范例:


#!/bin/bash

for ((i=0;i<10;i++));do

        for((j=0;j<10;j++));do

        [ $j -eq 5 ] && continue  2

        echo $j

        done

echo ---------------------------

done

break [N]:提前结束第N层整个循环,最内层为第1层

 格式:

范例:

while CONDITION1; do

CMD1

...

if CONDITION2; then

break

fi

CMDn

...

done


[root@centos7wyj data]$bash break.sh

0

1

2

3

4

[root@centos7wyj data]$cat break.sh

#!/bin/bash

for ((i=0;i<10;i++));do

        for((j=0;j<10;j++));do

        [ $j -eq 5 ] && break 2

        echo $j

        done

echo ---------------------------

done

[root@centos7wyj data]$

shift [n] 用于将参量列表 list 左移指定次数,缺省为左移一次。

参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。while 循环遍历位置参量列表时,常用到SHIFT

范例脚本:

#!/bin/bash

passwd=12345678

if [ $# -eq 0 ];then

echo "Usage: `basename $0` user1 user2 ..."

exit

fi


while [ -n "$1" ] ;do

if   id $1 &> /dev/null;then

 echo user $1 exist。

  else

useradd $1

       echo $passwd | passwd --stdin $1 &> /dev/null

echo $1 user is created, passwd is 12345678

fi

shift

done  


while read 的 特殊用法

while 循环的特殊用法,遍历文件或文本的每一行


格式:

while read line; do

循环体

done < /PATH/FROM/SOMEFILE

范例:

[root@centos8 ~]#echo magedu | read X ; echo $X

[root@centos8 ~]#echo magedu | while read X ; do echo $X;done

magedu

[root@centos8 ~]#echo magedu | { read X ; echo $X; }

magedu

[root@centos8 ~]#echo magedu | ( read X ; echo $X )

magedu

[root@centos8 ~]#echo mage wang zhang | ( read X Y Z; echo $X $Y $Z )

mage wang zhang

[root@centos8 ~]#echo mage wang zhang | while read X Y Z; do echo $X $Y $Z;done

mage wang zhang

while read检查磁盘空间:

[root@centos8 ~]#echo magedu | read X ; echo $X

[root@centos8 ~]#echo magedu | while read X ; do echo $X;donemagedu

[root@centos8 ~]#echo magedu | { read X ; echo $X; }magedu

[root@centos8 ~]#echo magedu | ( read X ; echo $X )magedu

[root@centos8 ~]#echo mage wang zhang | ( read X Y Z; echo $X $Y $Z )mage wang zhang

[root@centos8 ~]#echo mage wang zhang | while read X Y Z; do echo $X $Y $Z;donemage wang zhang

范例:单词文件

[root@centos6 ~]#wc -l /usr/share/dict/linux.words479829 /usr/share/dict/linux.words

select 循环与菜单

select NAME [in WORDS ... ;] do COMMANDS; done



select variable in list ;do

循环体命令

done

说明:

select 循环主要用于创建菜单,按数字顺序排列的菜单项显示在标准错误上,并显示 PS3 提示符,等待用户输入

用户输入菜单列表中的某个数字,执行相应的命令

用户输入被保存在内置变量 REPLY 中

select 是个无限循环,因此要用 break 命令退出循环,或用 exit 命令终止脚本。也可以按 ctrl+c

退出循环

select 经常和 case 联合使用

与 for 循环类似,可以省略 in list,此时使用位置参量

范例:

cat select.sh

#!/bin/bash

sum=0

PS3="请点菜(1-6): "select MENU in 北京烤鸭 佛跳墙 小龙虾 羊蝎子 火锅 点菜结束;do
case $REPLY in

1)echo $MENU 价格是 100

let sum+=100

;;

2)echo $MENU 价格是 88

let sum+=88

;;

3)echo $MENU价格是 66

let sum+=66

;;

4)echo $MENU 价格是 166

let sum+=166;;

5)echo $MENU 价格是 200

let sum+=200

;;

6) 

echo "点菜结束,退出"

break
;;
*)

echo "点菜错误,重新选择"

;;

esac
done

echo "总价格是: $sum"