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 来替换

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