天天看點

Linux革命性工具,shell腳本循環結構重複執行指令

為什麼要用循環結構

在shell運維中,很多時候我們都要重複的執行某個功能,而計算機比人的優勢大的地方就在于适合執行确定的功能。利用計算機的強大計算能力完成自動化腳本工作。

Linux革命性工具,shell腳本循環結構重複執行指令

比如我要建立一批使用者cat1、cat2、...、cat100。密碼是使用者名加上後六位随機數。這個過程如果手動完成是非常耗時,要重複執行useradd添加使用者并用passwd配置設定密碼。但是使用循環腳本就非常友善了,如果将使用者量增大到100台伺服器,每台伺服器配置設定1000個人使用者,就可以顯示出循環語句的威力。

Linux革命性工具,shell腳本循環結構重複執行指令

for循環

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done           
for i in 1 2 3 hello abc
do
    echo $i
done           

輸出目前路徑下所有檔案名

for i in `ls`
do
    echo $i
done           

輸出序列1-10

for i in $(seq 1 10)
do
    echo $i
done           
for i in {1..10}
do
    echo $i
done           

輸出字母a-z

for i in {a..z}
do
    echo $i
done           

for ((…;…;…)) do…done

for ((i=1;i<=10;i+=2))
do
    echo $i
done           

while循環

while 循環用于不斷執行一系列指令,也用于從輸入檔案中讀取資料。

while condition
do
    command
done           

偶數和

sum=0
i=0

while [ $i -le 50 ]
do
    let sum+=i
    let i+=2
done

echo "0-50的偶數和為:$sum"           

循環輸入名字,檔案結束符為Ctrl+d,輸入檔案結束符後read指令傳回false。

while read -p "Please input your name: " name
do
    echo $name
done           

until 循環

until 循環執行一系列指令直至條件為 true 時停止。

until 循環與 while 循環在處理方式上剛好相反。

一般 while 循環優于 until 循環,但在某些時候—也隻是極少數情況下,until 循環更加有用。

until 文法格式:

until condition
do
    command
done           

condition 一般為條件表達式,如果傳回值為 false,則繼續執行循環體内的語句,否則跳出循環。

以下執行個體我們使用 until 指令來輸出 0 ~ 9 的數字:

a=0

until [ ! $a -lt 10 ]
do
    echo $a
    a=`expr $a + 1`
done           

跳出循環

在循環過程中,有時候需要在未達到循環結束條件時強制跳出循環,Shell 使用兩個指令來實作該功能:break 和 continue。

Linux革命性工具,shell腳本循環結構重複執行指令

break 指令

break 指令允許跳出所有循環(終止執行後面的所有循環)。

下面的例子中,腳本進入死循環直至使用者輸入數字大于5。要跳出這個循環,傳回到shell提示符下,需要使用break指令。

while true
do
    read -p "請輸入1-5虹之間的數字:" n

    case $n in
        1|2|3|4|5) echo "你輸入的數字為$n"
        ;;
        *) echo "請輸入正确的數字範圍"
           break
        ;;
    esac
done
           

continue

continue 指令與 break 指令類似,隻有一點差别,它不會跳出所有循環,僅僅跳出目前循環。

對上面的例子進行修改:

while true
do
    read -p "請輸入1-5之間的數字:" n

    case $n in
        1|2|3|4|5) echo "你輸入的數字為$n"
        ;;
        *) echo "請輸入正确的數字範圍"
            continue
            echo "遊戲結束,這句話永遠不會被執行"
        ;;
    esac
done
           

視訊講解

視訊加載中...

相關推薦

  • 什麼是Linux系統?我們是否要用Linux
  • 學習Linux指令行,用手就行!
  • Linux革命性工具,shell腳本自動化
  • Linux革命性工具,shell腳本選擇結構讓程式更加智能
  • 什麼是C++變量,就是存儲資料的盒子
  • C++輸入輸出流,輸出是調試程式最重要的方法