1. 程式人生 > >Shell程式設計-08-Shell中的迴圈語句

Shell程式設計-08-Shell中的迴圈語句

    迴圈語句常用於重複執行一條命令或一組命令等,直到達到結束條件後,則終止執行。在Shell中常見的迴圈命令有whileuntilforselect等。

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中常用的迴圈中斷控制有breakcontinueexitreturn

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,或掃描下面的二維碼新增關注:
MyQRCode.jpg