天天看點

shell 腳本之for while until循環

在shell 腳本中循環結構共有三種, for while  until,until一般用的不多。

一 、 for 循環

用法一:周遊指令行參數

for i in "[email protected]"

do

        sum=$((sum + i))

done

echo "sum=$sum"

将個參數相加求和。

用法二:周遊list

for i in {1..100}

do

        sum=`expr $sum + $i`

done

echo "sum=$sum"

求和:1+2 +3 +...+100

用法三:周遊list

for ip in 10.118.4.{1..254}

do

(

ping $ip -c 2 > /dev/null

if test $? -eq 0

then

echo "$ip" is alive

fi

)&

done

與用法2其實是一樣的寫法,是用法二的變種

用法四:周遊一行中的單詞

read line

for word in $line

do

echo $word

done

用法二的變種

用法四:C風格

for ((i=0;i<${#word}; i++))

do

echo ${word:i:1}

done

周遊word 中的字元

用法五:子shell産生list

for i in $(seq 1 100)

do

        sum=`expr $sum + $i`

done

echo "sum=$sum"

用法六:周遊關聯數組

//設定關聯數組

for i in a b c d e

do

        array[$i]=$value

        let value++

done

//列印數組元素值,${!array[*]} 列出數組索引

for i in ${!array[*]}

do

        echo ${array["$i"]}

done

二、 while 循環

while 循環通常用于處理行的讀取

用法一:取指令執行結果作為條件

while read line

do

echo $line

done  < inputfile

從inputfile 中循環讀取一行,預設從stdin讀取

也可以寫成:

cat inputfile | while read line

do

echo $line

done 

用法二:用法一變種, 無限循環

while  true

do

:

done

用法三:用子shell 輸入

while read line

do

        echo $line

done< <(ls -l)

注意這裡<(ls -l) 會當成一個臨時檔案進行輸入

用法四:C風格

count=0

while ((count < 5))

do

        echo $count

        let count++

done

用法五:

count=1

while [[ $flag -ne 1 ]]

do

        echo $count

        let count++

        [ $count -eq 5 ] && flag=1

done

其實以上用法 大多結構都為  while 指令 do  done, 由于shell 腳本大多用于文本處理,系統管理,很少會用來做大量算術運算是以,用法一用的更多些。

三、 until 

until在等待某個事件發生時比較好用

如: 等待某個使用者登入 

read user

until who | grep "$user" > /dev/null

do

sleep 30

done

基本都能用while 來替換