Shell程式設計-08-Shell中的迴圈語句
迴圈語句常用於重複執行一條命令或一組命令等,直到達到結束條件後,則終止執行。在Shell中常見的迴圈命令有 while 、 until 、 for 和 select 等。
while語句
基礎語法
while <條件表示式> do 語句 done
while迴圈讀取檔案
- 1、使用exec
exec < FILE while read line do command done
- 2、使用cat和管道
cat FILEPATH/FILE | while read line do command done
- 3、在done後使用重定向
while read line do command done < FILE
while示例
1、列印數字
[root@localhost Test]# cat while.sh #!/bin/bash a=$1 while [ ${a} -ge 0 ] do echo "Current number is:" ${a} a=$((a-1)) done [root@localhost Test]# bash while.sh 5 Current number is: 5 Current number is: 4 Current number is: 3 Current number is: 2 Current number is: 1 Current number is: 0
2、讀取檔案
# 讀取網絡卡配置檔案 [root@localhost Test]# cat readnet.sh #!/bin/bash while read line do echo ${line} done < /etc/sysconfig/network-scripts/ifcfg-ens5f1 [root@localhost Test]# bash readnet.sh TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens5f1 UUID=dbab37df-749f-4cf5-b0a9-c9d7e6632f44 DEVICE=ens5f1 ONBOOT=yes IPADDR=192.168.8.8 NETMASK=255.255.255.0 GATEWAY=192.168.8.1
until語句
基礎語法
until<條件表示式> do 語句 done
until語句的語法與while相似, 區別在until會在條件表示式不成立時,進入迴圈執行命令,條件表示式成立時,終止迴圈 。until的應用場景比較省,瞭解即可。
until示例
[root@localhost Test]# cat until.sh #!/bin/bash a=$1 until [ ${a} -ge 10 ] do echo "Current number is:" ${a} a=$((a-1)) if [ $a -lt 0 ] then break fi done [root@localhost Test]# bash until.sh 5 # 不滿足條件時,進入迴圈體 Current number is: 5 Current number is: 4 Current number is: 3 Current number is: 2 Current number is: 1 Current number is: 0 [root@localhost Test]# bash until.sh 50 # 滿足條件時,則不進入迴圈體 [root@localhost Test]#
for語句
for迴圈語句與while迴圈詩句類似,但for迴圈語句主要用於有限次的迴圈場景,while主要無限次迴圈的場景,如守護程序
基礎語法
1、第一種格式
for var in list do 語句 done
在該結構中 in list 可以省略。在省略時,相當於 in "$@" 即等價於 for var in "$@"
2、第二種格式
for((ex1;exp2;exp3)) do 語句 done
這種格式是類C的風格,大家也見得較多
for示例
1、列印資料
[root@localhost Test]# cat for.sh #!/bin/bash echo "first format for sentense " for i in {1..5} do echo ${i} done echo "second format for sentense" for((j=1;j<=5;j++)) do echo ${j} done [root@localhost Test]# bash for.sh first format for sentense 1 2 3 4 5 second format for sentense 1 2 3 4 5
2、列印檔名
[root@localhost Test]# cat printfilename.sh #!/bin/bash path=$1 for filename in $(ls $1) do echo ${filename} done [root@localhost Test]# bash printfilename.sh "/root/Test/" caseif.sh case.sh compareNum.sh eval.sh exec.sh for.sh if.sh para.sh ping.sh printfilename.sh readnet.sh shift.sh testPID.sh testposition.sh until.sh while.sh
select語句
select 語句常用於建立選擇性選單。在執行帶有select迴圈語句的指令碼時,輸出會按照數字順序列表顯示列表選項,並顯示提示符(預設為#?),等待使用者做出選擇。
基礎語法
select var in list do 語句 done
1、在該結構中 in list 可以省略,省略相當於 in "$@" 即等價於 select var in "$@"
2、select與for迴圈不同的是:select迴圈執行後會出現選單選項等待使用者選擇,不會自動迴圈所有變數列表,而使用者輸入的只能是選單項前面的數字序號,每輸入一次對應的序號則會執行迴圈一次,直至變數後面對應的列表選取完畢
select示例
1、選擇目錄檔案
[root@localhost Test]# cat select.sh #!/bin/bash select file in $(ls $1) do echo "Current file is:"${file} done [root@localhost Test]# bash select.sh /root/Test 1) caseif.sh7) if.sh13) shift.sh 2) case.sh8) para.sh14) testPID.sh 3) compareNum.sh9) ping.sh15) testposition.sh 4) eval.sh10) printfilename.sh16) until.sh 5) exec.sh11) readnet.sh17) while.sh 6) for.sh12) select.sh #? 2 Current file is:case.sh #? 3 Current file is:compareNum.sh #? 19 Current file is: #?
迴圈中斷控制
大家有過程式設計基礎的童鞋都知道,在迴圈體出現某一種,我們可以提前中斷迴圈體。在Shell中常用的迴圈中斷控制有 break 、 continue 、 exit 、 return 。
break/continue:常用於if、for、while等條件和迴圈語句中,從而控制流程的走向
exit:常用於終止所有語句並退出當前指令碼,也可以用於返回前一次程式或命令的執行狀態
return:類似於exit,但return僅適用於函式內部返回函式的執行狀態值
以上詳細解釋如下所示:
命令 | 解釋 |
---|---|
break n | n:跳出迴圈的層數;如省略n,則跳出整個迴圈 |
continu n | n: 退到第n層繼續迴圈;如省略n,則跳過本次迴圈,繼續下一次迴圈 |
exit n | 退出當前Shell程序;n:上一次程式執行的狀態返回值, 如省略n,可使用$?獲取執行狀態值 |
return n | 用於函式的返回值,可以用來判斷函式執行是否正確 |
迴圈中斷控制示例
1、break示例
[root@localhost Test]# cat break.sh #!/bin/bash for(( i=1;i<$1;i++ )) do if [ ${i} -eq 3 ] then echo "break test" break fi echo ${i} done [root@localhost Test]# bash break.sh 5 1 2 break test
2、continue示例
[root@localhost Test]# cat continue.sh #!/bin/bash for(( i=1;i<$1;i++ )) do if [ ${i} -eq 3 ] then echo "contiunue test" continue fi echo ${i} done [root@localhost Test]# bash continue.sh 5 1 2 contiunue test 4
3、exit示例
[root@localhost Test]# cat exit.sh #!/bin/bash for(( i=1;i<$1;i++ )) do if [ ${i} -eq 3 ] then echo "exit test" exit 88 fi echo ${i} done [root@localhost Test]# bash exit.sh 5 1 2 exit test [root@localhost Test]# echo $? 88
迴圈語句總結
- 1、while迴圈語句常用於執行守護程序以及實現我們希望迴圈持續執行不退出的應用,其他的迴圈則可以使用for和定時任務crond代替
- 2、根據使用頻次,if和for使用最高,其次是while
本文同步在微信訂閱號上釋出,如各位小夥伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼新增關注:
