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.www58058.com/37138
文章思路很清晰,對for,until,while語句的語法總結的很全面,同時通過示例演示了until和while之間的區別,很好,再接再勵哦