shell 腳本之for while until循環

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

一 、 for 循環

用法一:遍歷命令行參數

for i in "$@"
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 來替換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章