For循環
For循環格式
For 變量名 in 列表 ; do
循環體
Done
執行機制:
依次將列表中的元素賦值給變量名,每次賦值后即執行一次循環體,知道列表中的元素耗盡,循環結束。
列表中可以是各種各樣的空格隔開的字符,數字,單詞都可以,列表中有多少個字符,將執行多少遍循環。在執行循環的時候,第一次執行循環,將匹配列表中的第一個值,比如說列表中有a b c d四個字母,當第一次執行循環的時,這個變量的值將等于a。循環體可以執行很多指令。
例如:
列表生成方式:
(1)整數列表:
{1..10} 生成1到10的數 但是不可以加變量
Seq 1 10 生成1到10的數 可以加變量
步進 seq 1 2 10 每次加2進行遞增
由于seq是命令,在for循環里要調用命令,即命令調命令,需要用反向單引號包住。
eg:for id in `seq 1 10`,也可以用$()。
(2)返回列表命令
$(COMMAND)
(3)使用glob 如:“*.sh”
例如:#!/bin/bash
For file in /root/bin/*.sh
匹配該路徑下所有是.sh結尾的文件
do
echo “the filename is $file”
(4)變量引用 $* $@
$* 和$@的區別
新建腳本test.sh
執行結果
$*將a b c看成了一個獨立的整體。
新建腳本test2.sh
執行結果
$@將a b c看成了三個獨立的字符串。
但是,這只是將$@ $*用引號引起來才有區別,不用引號則二者都將a b c看成三個獨立的字符串,沒有區別。
While循環
通用性更好,適合范圍廣
While格式:
While CONDITION ; do
循環體
Done
COMDITTON:循環控制條件,進入循環之前,先做一次判斷,每一次循環之后再做一次判斷,條件為true,則執行一次循環。直到條件測試狀態為“false”終止循環。
因此,COMDITION一般應該有循環控制變量。而此變量的值會在循環體不斷的被修正。
進入條件:CONDITION為 true
退出條件:CONDITION為 false
COMDITION不僅是執行循環的條件,也是進入循環的條件。
例如:
執行結果
先判斷10是否大于1,大于1則打印“da yu 1”并10-1=9再進入循環,直到等于1則退出循環。
Until循環
格式:
Until CONDITION ; do
循環體
Done
進入條件:CONDITION為false
退出條件;CONDITION為true
先判斷CONDITION是否為真,如果為真,則退出循環,如果CINDITION為假,才
才進入循環體,執行完循環體,再判斷CONDITION是否為假,如果為假,則再進入循
環體,直到條件結果為真時,才退出循環。
例如:
執行結果
當i=10小于1條件為假時,進入循環,并輸出‘da yu 1’,并10-1=9繼續進入循環。直到結果等于1時,循環結束,輸出yyy。
循環控制語句
Continue[N]:提前結束第N層的本輪循環,而直接進入下一輪循環判斷,最內層為第一層。Continue是退出當次循環。
例如:
當10小于1為假時,進入循環,10除以2余數為0且余數不等于1,為假,則打印$i也就是10。然后10-1=9進入循環。9除以2余數為1且余數等于1,為真。則執行9-1,并退出本次循環,進入下一次循環,依次類推,直到$i小于1為真時,退出循環,并打印yyy。
Break[N]提前結束第N層循環,break是退出整個循環,例如:
執行結果:
當10小于1為假時,進入循環,10的余數是0,不等于1,為假。將10打印輸出并減1進入下一輪循環。9小于1為假時,進入循環,9的余數是1,為真,則break退出整個循環,并打印yyy。
While的特殊用法
遍歷文件的每一行。
While read line ;do
循環體
Done < /PATH/FROM/SOMEFILE
依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變量line。
例如:
這是一個死循環。
例如:while read passwd ; do echo $passwd |cut -d: -f1,3;done < /etc/passwd
輸入一個變量$passwd。當每次讀一個文件進來后,每一行的內容就賦值給了$passwd這個變量,并將取出的行顯示出來。以“:”作為分隔符,取出其第一列和第三列,然后重定向輸出給/etc/passwd。是一行一行處理的,讀一行打印一遍。
雙小括號的特殊用法 ((…….))
雙小括號方法,即((……..))格式,也可以用來算數運算,雙小括號也可以使用bash shell實現c語言風格的變量操作。
#i=10
#((i++))
例如:
For循環的特殊格式
for((控制變量初始化;條件判斷表達式;控制變量的修正表達式))
do
循環體
Done
控制變量初始化:僅在運行到循環代碼段時執行一次,只執行一次。
控制變量的修正表達式:每輪循環結束,會先進行控制變量的修正運算,然后再條件判斷。
例如:
For ((cmd1;cmd2;cmd3))
Do
Cmd4
Done
先執行cmd1(不管真假),執行完后再執行cmd2,判斷cmd2是否為真,為真則執行cmd4,如果為假,則退出循環。
Cmd4執行完后接著執行cmd3。執行完cmd3后,接著執行cmd2,判斷cmd2的
真假,為真則繼續循環。
Cmd1只執行一次,作為for循環的初始化語句,若cmd1為假,則退出。
Cmd2才是進入循環和退出循環的判斷條件,cmd3和cmd4只是執行,不管真假。
例如:
執行結果 :6
Select循環與菜單case
格式:
Select variable in list
Do
循環體命令
Done
Select循環主要用來創建菜單。按數字順序排列的菜單項將顯示在標準錯誤傷,并顯示PS3提示符,等待用戶輸入。
用戶輸入菜單列表中的某個數字,將執行相應的命令。
用戶輸入被保存在內置變量ERPLY中。
例如:
執行結果
Select是個無限循環,因此要記住使用break命令退出循環,或用exit命令終止腳本,也可以按Ctrl+C退出循環。
Select經常和case聯合使用。
與for循環類似,可以省略in list,此時使用位置變量。例如:$1 $2 $3
原創文章,作者:zzd,如若轉載,請注明出處:http://www.www58058.com/37905
文章對shell循環語句的語法總結的很好,同時也通過簡單的練習加深了自己與各語法的運用,課堂練習都是老師精心挑選出來的,也是筆試中常會遇到的經典試題,需要認真完成哦。