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、列印數字
[[email protected] Test]# cat while.sh #!/bin/bash a=$1 while [ ${a} -ge 0 ] do echo "Current number is:" ${a} a=$((a-1)) done [[email protected] 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、讀取檔案
# 讀取網絡卡配置檔案 [[email protected] Test]# cat readnet.sh #!/bin/bash while read line do echo ${line} done < /etc/sysconfig/network-scripts/ifcfg-ens5f1 [[email protected] 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示例
[[email protected] 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
[[email protected] 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
[[email protected] Test]# bash until.sh 50 # 滿足條件時,則不進入迴圈體
[[email protected] Test]#
for語句
for迴圈語句與while迴圈詩句類似,但for迴圈語句主要用於有限次的迴圈場景,while主要無限次迴圈的場景,如守護程序
基礎語法
1、第一種格式
for var in list
do
語句
done
在該結構中in list可以省略。在省略時,相當於in "[email protected]" 即等價於for var in "[email protected]"
2、第二種格式
for((ex1;exp2;exp3))
do
語句
done
這種格式是類C的風格,大家也見得較多
for示例
1、列印資料
[[email protected] 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
[[email protected] Test]# bash for.sh
first format for sentense
1
2
3
4
5
second format for sentense
1
2
3
4
5
2、列印檔名
[[email protected] Test]# cat printfilename.sh
#!/bin/bash
path=$1
for filename in $(ls $1)
do
echo ${filename}
done
[[email protected] 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 "[email protected]"即等價於select var in "[email protected]"
2、select與for迴圈不同的是:select迴圈執行後會出現選單選項等待使用者選擇,不會自動迴圈所有變數列表,而使用者輸入的只能是選單項前面的數字序號,每輸入一次對應的序號則會執行迴圈一次,直至變數後面對應的列表選取完畢
select示例
1、選擇目錄檔案
[[email protected] Test]# cat select.sh
#!/bin/bash
select file in $(ls $1)
do
echo "Current file is:"${file}
done
[[email protected] Test]# bash select.sh /root/Test
1) caseif.sh 7) if.sh 13) shift.sh
2) case.sh 8) para.sh 14) testPID.sh
3) compareNum.sh 9) ping.sh 15) testposition.sh
4) eval.sh 10) printfilename.sh 16) until.sh
5) exec.sh 11) readnet.sh 17) while.sh
6) for.sh 12) 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示例
[[email protected] 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
[[email protected] Test]# bash break.sh 5
1
2
break test
2、continue示例
[[email protected] 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
[[email protected] Test]# bash continue.sh 5
1
2
contiunue test
4
3、exit示例
[[email protected] 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
[[email protected] Test]# bash exit.sh 5
1
2
exit test
[[email protected] Test]# echo $?
88
迴圈語句總結
- 1、while迴圈語句常用於執行守護程序以及實現我們希望迴圈持續執行不退出的應用,其他的迴圈則可以使用for和定時任務crond代替
- 2、根據使用頻次,if和for使用最高,其次是while
本文同步在微信訂閱號上釋出,如各位小夥伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼新增關注: