shell常用循環(huán)語(yǔ)法
本文抄襲自其他博主(比書(shū)上總結(jié)的到位)庐杨,鏈接在文末
- shell常用循環(huán)語(yǔ)法
- 1 for 循環(huán)
- 2 while 循環(huán)
- 3 until 循環(huán)
- 4 select 實(shí)現(xiàn)的循環(huán)
- 5 循環(huán)控制符
1 for 循環(huán)
1.1 列表for循環(huán)
1.1.1 數(shù)字for循環(huán)
#!/bin/bash
for value in {1..5}
#for value in 1 2 3 4 5
do
echo "Now value is $value..."
done
- do和done之間的命令稱為循環(huán)體绰咽,執(zhí)行次數(shù)和list列表中常數(shù)或字符串的個(gè)數(shù)相同疼邀。for循環(huán)宏悦,首先將in后list列表的第一個(gè)常數(shù)或字符串賦值給循環(huán)變量,然后執(zhí)行循環(huán)體萄传,以此執(zhí)行l(wèi)ist儒陨;最后執(zhí)行do命令后的命令序列。
- shell支持列表for循環(huán)使用略寫的計(jì)數(shù)方式琳彩,1~5的范圍用{1..5}表示(大括號(hào)不能去掉誊酌,否則會(huì)當(dāng)作一個(gè)字符串處理)。
??shell中還支持按規(guī)定的步數(shù)進(jìn)行跳躍的方式實(shí)現(xiàn)列表for循環(huán)露乏,例如計(jì)算1~100內(nèi)所有的奇數(shù)之和
#!/bin/bash
sum=0
for i in {1..100..2}
do
let "sum+=i"
done
echo "sum=$sum"
#!/bin/bash
for i in $(seq 1 5)
do
echo $(expr $i \* $i + 1);
done
1.1.2 字符串for循環(huán)
??顯示參數(shù)列表的所有單詞
#!/bin/bash
for i in v1 v2 v3 ;
do
echo value is: $i;
done
??顯示list中的所有單詞
#!/bin/bash
list="Earth is the Home of Human! ";
for i in $list;
do
echo word is $i;
done
??傳入?yún)?shù)列表
#!/bin/bash
for i in $* ;
do
echo $i is input value\! ;
done
1.1.3 路徑查找for循環(huán)
??查詢當(dāng)前目錄下的文件列表
#!/bin/bash
for file in $( ls )
# for file in `ls`
# for file in *
do
echo "file: $file"
done
??通配符查找指定路徑
#!/bin/bash
for file in /log/*;
do
echo $file;
done
??通配符查找指定路徑下符合指定擴(kuò)展名的文件路徑
#!/bin/bash
for file in /var/log/*log;
do
echo $file;
done
1.2 類C風(fēng)格的for循環(huán)
#!/bin/bash
for((i=1;i<=5;i++));
do
echo $(expr $i \* $i + 1);
done
#!/bin/bash
awk 'BEGIN{
for(i=1; i<=5; i++)
print (i*i+1)
}'
2 while 循環(huán)
??也稱為前測(cè)試循環(huán)語(yǔ)句碧浊,重復(fù)次數(shù)是利用一個(gè)條件來(lái)控制是否繼續(xù)重復(fù)執(zhí)行這個(gè)語(yǔ)句。為了避免死循環(huán)瘟仿,必須保證循環(huán)體中包含循環(huán)出口條件即表達(dá)式存在退出狀態(tài)為非0的情況箱锐。
??例如,計(jì)算1~100以內(nèi)所有的奇數(shù)之和:
#!/bin/bash
sum=0
i=1
while(( i <= 100 ))
do
let "sum+=i"
let "i += 2"
done
echo "sum=$sum"
3 until 循環(huán)
??until命令和while命令類似劳较,while能實(shí)現(xiàn)的功能until也可以實(shí)現(xiàn)驹止。但區(qū)別是until循環(huán)的退出狀態(tài)是為0(與while剛好相反),即whie循環(huán)在條件為真時(shí)繼續(xù)執(zhí)行循環(huán)观蜗,而until則在條件為假時(shí)執(zhí)行循環(huán)臊恋。
??例如,計(jì)算1~100以內(nèi)所有的奇數(shù)之和:
#!/bin/bash
i=1
sum=0
until [[ "$i" -gt 100 ]] #直到i大于100
do
let "sum+=i"
let "i += 2"
done
echo "sum=$sum"
4 select 實(shí)現(xiàn)的循環(huán)
??select結(jié)構(gòu)從技術(shù)角度看不能算是循環(huán)結(jié)構(gòu)墓捻,只是相似而已捞镰,它是bash的擴(kuò)展結(jié)構(gòu)用于交互式菜單顯示,功能類似于case結(jié)構(gòu)毙替,但是比case的交互性要好岸售。在遍歷列表功能中,select結(jié)構(gòu)可以實(shí)現(xiàn)循環(huán)的功能厂画。
??例如凸丸,以下選擇,只有選擇white的時(shí)候袱院,退出循環(huán)
#!/bin/bash
select color in "red" "blue" "green" "white" "black"
do
echo $color
done
5 循環(huán)控制符
??在循環(huán)語(yǔ)法中屎慢,經(jīng)常需要根據(jù)條件控制循環(huán)退出或跳過(guò)本次執(zhí)行瞭稼,這時(shí)候就需要用到循環(huán)控制符。循環(huán)控制符主要包括兩個(gè):break和continue腻惠。
- break:退出本層循環(huán)循環(huán)环肘。
- continue:只退出本次循環(huán),仍然執(zhí)行后繼續(xù)循環(huán)集灌。
5.1 break
??在for悔雹、while和until循環(huán)中break可強(qiáng)行退出循環(huán)。
??注意:break語(yǔ)句僅能退出當(dāng)前的循環(huán)欣喧,如果是兩層循環(huán)嵌套腌零,則需要在外層循環(huán)中使用break。
??例如,計(jì)算1~100以內(nèi)所有的奇數(shù)之和:
#!/bin/bash
sum=0
for (( i=1; i <= 1000; i+=2))
do
if [ "$i" -lt 100 ]
then
let "sum+=i"
elif [ "$i" -gt 100 ]
then
echo "sum=$sum"
break
fi
done
5.2 continue
??在for唆阿、while和until中用于讓腳本跳過(guò)其后面的語(yǔ)句益涧,執(zhí)行下一次循環(huán)。
??例如驯鳖,顯示10以內(nèi)能被3整除的正整數(shù)闲询。
#!/bin/bash
for (( i=1; i < 10; i++ ))
do
let "tmp=i%3" #被3整除
if [ "$tmp" -ne 0 ]
then
continue
fi
echo -n "$i "
done
echo ""