bash脚本class2—循环语句的使用
一.三种循环语句以及其具体使用方法
我们知道,在shell脚本编程过程中,为了实现逻辑关系的运算,有三种执行命令的顺序:顺序执行,选择执行,循环执行。通过if,case这类语句可以实现条件筛选后执行命令,这次课程中所学的主要知识点为循环语句的三种使用方式:for,while,until。下面作为总结,我将一一介绍这三种使用方法。
1.for语句的使用方法
for语句的格式是这样的:
for 变量 in 变量列表;do 循环命令 done
变量就是所要执行变量的参数,这些参数是由我们定义在in后面的变量列表中,按照变量列表中的所有参数顺序一次一次的执行循环命令,直到列表中的参数使用完。举例如下:
[root@localhost ~]# for x in {1..10};do echo $[x+1];done 2 3 4 5 6 7 8 9 10 11
这段命令就是一段for循环语句,显示变量1-10分别加1得到的所有值
for语句还有更为简洁的写法,与c语言逻辑语句相似,for((cmd1;cmd2;cmd3)) ;do 循环语句 ;done。其中cmd1为变量初始设定,cmd2为变量判断,cmd3为变量值更改,举个例子:
打印99乘法表:
#!/bin/bash for ((x=1;x<=9;x++));do for ((y=1;y<=x;y++));do echo -ne "$x*$y=`echo $[x*y]'\t'`" done echo "" done
执行得到结果
[root@localhost ~]# bash 99for.sh 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
2.while与until的循环使用方法
while与until循环的语句写法是一样的,不同的是判断执行循环的条件不同。while 判断 ;do 循环体;done。表示当条件判断为真时,执行循环体,相反until 判断 ;do 循环体;done表示当条件判断为假时,执行循环体。举例如下:
#!/bin/bash k=0 i=1 while [[ $i -le 100 ]] ;do let k=$k+$i let i=$i+1 done echo $k
效果等同于
#!/bin/bash k=0 i=1 until [[ $i -gt 100 ]] ;do let k=$k+$i let i=$i+1 done echo $k
执行这两个脚本后,得到的结果相同,为1+2..+10=5050。
由于这两个执行指令相似,所以使用while进行统一归类实例。while与until可以制作死循环语句,如下写法:
while ture ;do 循环体 ;done
until false ;do 循环体 ;done
while还有一种特殊使用方法,使用重定向,将文件每一行内容作为变量,使用read逐行扫描并执行循环体。效果如同sed命令。举例如下:
将/etc/passwd文件的每一行首字符打印出来:
#!/bin/bash while read xxx ; do echo `echo $xxx | cut -c 1` done < /etc/passwd [root@localhost bin]# bash 000001.sh r b d a l s s h m o g f n s ...
3.break和continue
break与continue用法相似,代表意义不同。这两个指令使用在循环语句中,后面可以接数字表示第N层循环,不加或者1表示当前循环。continue表示退出这一次循环,执行下一个参数的循环。而break表示退出当前的循环。在while与until中很常见。比如:
#!/bin/bash for ((i=1;i<=10;i++));do if [ $i -eq 2 -o $i -eq 4 ];then continue fi echo $i done [root@localhost bin]# bash 000000.sh 1 3 5 6 7 8 9 10
这个语句本来表示显示从1到10,但是在循环中if判定条件中当i=2或4的时候选择执行continue,所以下面的echo $i就被跳过执行了。
二.select语句以及与case语句的联合使用方式
select语句是一个死循环命令语句,想要跳出需要使用条件判定和break。命令格式为:select 变量 in 变量列表 ;do 循环体 ;done。select命令创建一个菜单,当我们输入编号时,按照编号打印相应的变量。如下所示:
#!/bin/bash echo "who is bitch?" select xxx in laowang laosong marong;do echo $xxx if [[ $xxx == marong ]];then echo "Sure,you are right!!" break else echo "SB Think more!" fi done [root@localhost bin]# bash 000002.sh who is bitch? 1) laowang 2) laosong 3) marong #? 1 laowang SB Think more! #? 2 laosong SB Think more! #? 3 marong Sure,you are right!!
执行后如上所示。marong是bitch。下面看select与case的合作:
#!/bin/bash echo "who is bitch?" select xxx in laowang laosong marong;do case $xxx in laowang) echo "wrong!" ;; laosong) echo "you almost right,but he is a man" ;; marong) echo "Sure! she is so bitch!!" break esac done [root@localhost bin]# bash 000002.sh who is bitch? 1) laowang 2) laosong 3) marong #? 1 wrong! #? 2 you almost right,but he is a man #? 3 Sure! she is so bitch!!
原创文章,作者:mcgeewang,如若转载,请注明出处:http://www.178linux.com/37138
评论列表(1条)
文章思路很清晰,对for,until,while语句的语法总结的很全面,同时通过示例演示了until和while之间的区别,很好,再接再励哦