在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 來替換