shell常用循環(huán)語法

shell常用循環(huán)語法

本文抄襲自其他博主(比書上總結(jié)的到位),鏈接在文末

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ù)或字符串的個數(shù)相同。for循環(huán),首先將in后list列表的第一個常數(shù)或字符串賦值給循環(huán)變量,然后執(zhí)行循環(huán)體,以此執(zhí)行l(wèi)ist;最后執(zhí)行do命令后的命令序列。
  • shell支持列表for循環(huán)使用略寫的計數(shù)方式,1~5的范圍用{1..5}表示(大括號不能去掉,否則會當作一個字符串處理)。

??shell中還支持按規(guī)定的步數(shù)進行跳躍的方式實現(xiàn)列表for循環(huán),例如計算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)

??查詢當前目錄下的文件列表

#!/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

??通配符查找指定路徑下符合指定擴展名的文件路徑

#!/bin/bash  
  
for file in /var/log/*log;  
do  
echo $file;  
done

1.2 類C風格的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)

??也稱為前測試循環(huán)語句,重復次數(shù)是利用一個條件來控制是否繼續(xù)重復執(zhí)行這個語句。為了避免死循環(huán),必須保證循環(huán)體中包含循環(huán)出口條件即表達式存在退出狀態(tài)為非0的情況。

??例如,計算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能實現(xiàn)的功能until也可以實現(xiàn)。但區(qū)別是until循環(huán)的退出狀態(tài)是為0(與while剛好相反),即whie循環(huán)在條件為真時繼續(xù)執(zhí)行循環(huán),而until則在條件為假時執(zhí)行循環(huán)。

??例如,計算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 實現(xiàn)的循環(huán)

??select結(jié)構(gòu)從技術角度看不能算是循環(huán)結(jié)構(gòu),只是相似而已,它是bash的擴展結(jié)構(gòu)用于交互式菜單顯示,功能類似于case結(jié)構(gòu),但是比case的交互性要好。在遍歷列表功能中,select結(jié)構(gòu)可以實現(xiàn)循環(huán)的功能。

??例如,以下選擇,只有選擇white的時候,退出循環(huán)

#!/bin/bash  

select color in "red" "blue" "green" "white" "black"  
do   
    echo $color  
done  

5 循環(huán)控制符

??在循環(huán)語法中,經(jīng)常需要根據(jù)條件控制循環(huán)退出或跳過本次執(zhí)行,這時候就需要用到循環(huán)控制符。循環(huán)控制符主要包括兩個:break和continue。

  • break:退出本層循環(huán)循環(huán)。
  • continue:只退出本次循環(huán),仍然執(zhí)行后繼續(xù)循環(huán)。

5.1 break

??在for、while和until循環(huán)中break可強行退出循環(huán)。

??注意:break語句僅能退出當前的循環(huán),如果是兩層循環(huán)嵌套,則需要在外層循環(huán)中使用break。

??例如,計算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中用于讓腳本跳過其后面的語句,執(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 "" 

摘抄自

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1 shell腳本簡介 在簡單介紹shell腳本(shell script)之前,先簡單介紹一下shell。 1....
    Jerry_1116閱讀 23,099評論 0 5
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,695評論 0 5
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,295評論 0 17
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,994評論 0 2
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,235評論 0 38

友情鏈接更多精彩內(nèi)容