shell腳本的常用循環(huán)

1 shell腳本簡介

在簡單介紹shell腳本(shell script)之前,先簡單介紹一下shell。

1.1 shell簡介

在計算機科學中,shell(殼層)指“為用戶提供用戶界面”的軟件,通常指的是命令行界面的解析器。一般來說,這個詞是指操作系統(tǒng)中,提供訪問內(nèi)核所提供之服務的程序。Shell也用于泛指所有為用戶提供操作界面的程序,也就是程序和用戶交互的接口。因此與之相對的是程序內(nèi)核(英語:Kernel),內(nèi)核不提供和用戶的交互功能。
不過這個詞也拿來指應用軟件,或是任何在特定組件外圍的軟件,例如瀏覽器或電子郵件軟件是HTML排版引擎的shell。Shell這個詞是來自于操作系統(tǒng)(內(nèi)核)與用戶界面的外層界面。
通常將shell分為兩類:命令行與圖形界面。命令行殼層提供一個命令行界面(CLI);而圖形殼層提供一個圖形用戶界面(GUI)。

1.2 shell腳本簡介

shell腳本(英語:shell script),又稱shell命令稿、程序化腳本,是一種電腦程序與文本文件,內(nèi)容由一連串的shell命令組成,經(jīng)由Unix Shell直譯其內(nèi)容后運作。被當成是一種腳本語言來設計,其運作方式與解釋型語言相當,由Unix shell扮演命令行解釋器的角色,在讀取shell腳本之后,依序運行其中的shell命令,之后輸出結(jié)果。利用shell腳本可以進行系統(tǒng)管理,文件操作等。
在Unix及所有的類Unix系統(tǒng)中,如Linux、FreeBSD等操作系統(tǒng),都存在shell腳本。依照Unix shell的各種不同類型,shell腳本也有各種不同方言,如Bourne shell(sh),Bourne-Again shell(bash),C shell(csh)等等。在DOS、OS/2、Microsoft Windows中的批處理文件,跟shell腳本有類似的功能。

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

常見的shell腳本循環(huán)語法包括for、while和until。除此之外,還有一些其他語法,能夠?qū)崿F(xiàn)循環(huán)(遍歷)功能。和循環(huán)相關的還有循環(huán)控制符break和continue,用于控制流程轉(zhuǎn)向。

2.1 for循環(huán)

for循環(huán)屬于“當型循環(huán)”,即“當滿足條件的時候執(zhí)行”。

2.1.1 for循環(huán)的類型

for循環(huán)有三種類型:

  • 列表for循環(huán)
  • 類C風格的for循環(huán)

2.1.1.1 列表for循環(huán)

  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 
列表for循環(huán)結(jié)果
  • 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"

常見的數(shù)值for循環(huán)語法還有:

#!/bin/bash

for i in $(seq 1 5)
do 
echo $(expr $i \* $i + 1);
done
計算1~5中數(shù)字的平方+1
  1. 字符串for循環(huán)
    字符串for循環(huán)和數(shù)字for循環(huán)沒有本質(zhì)區(qū)別,只是形式有細微差別而已。下面列出幾種常見的用法。
  • 顯示參數(shù)列表的所有單詞
#!/bin/bash  

for i in v1 v2 v3 ;  
do  
echo value is: $i;  
done 
顯示參數(shù)列表的所有值
  • 顯示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
傳入?yún)?shù)列表
  1. 路徑查找for循環(huán)
    通過for循環(huán)可以查找指定目錄下的文件列表,并且可以使用通配符。
  • 查詢當前目錄下的文件列表
#!/bin/bash

for file in $( ls )
do
   echo "file: $file"
done

for file in $( ls )語法的等效語法有很多,如下:

for file in `ls`

或者

for file in *
查詢當前文件夾下的文件列表
  • 通配符查找指定路徑
#!/bin/bash  
  
for file in /root/*;  
do  
echo $file;  
done
路徑通配符匹配
  • 通配符查找指定路徑下符合指定擴展名的文件路徑
#!/bin/bash  
  
for file in /root/study/shell/*.sh;  
do  
echo $file;  
done
通配符查找指定路徑下符合指定擴展名的文件路徑

2.1.1.2 類C風格的for循環(huán)

類C風格的for循環(huán),和C沒有太大的區(qū)別,這里只進行示例,不再贅述。

#!/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)
}'

結(jié)果:


計算1~5中數(shù)字的平方+1

2.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"

當然,條件可以使字符串,可以是輸入值,可以是標記等,此處不再贅述。

2.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"

2.4 其他可以實現(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  
select選項菜單

3 循環(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)。

循環(huán)控制符和C以及Java等常見語法功能類似,在理不再贅述,只給出常用示例。

3.1 break退出本層循環(huán)

在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

3.2 continue退出本次循環(huán)繼續(xù)執(zhí)行下一次循環(huán)

在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 "" 

4 小結(jié)

以上是自己在學習Linux的過程中的一部分總結(jié),和大家共享。同時,也參考了其他人的博客,在參考列表中列出來了。

5 [參考列表]

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

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

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