迴圈語句常用於重覆執行一條命令或一組命令等,直到達到結束條件後,則終止執行。在Shell中常見的迴圈命令有 while 、 until 、 for 和 select 等。 while語句 基礎語法 while迴圈讀取文件 1、使用exec until語句的語法與while ...
目錄
迴圈語句常用於重覆執行一條命令或一組命令等,直到達到結束條件後,則終止執行。在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.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示例
[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,或掃描下麵的二維碼添加關註: