您的位置:首页 > 运维架构 > Shell

Shell中的循环

2016-06-30 22:50 411 查看
工作中,我们经常会有重复进行某一个动作的需求。有的需求是知道重复某个操作多少次,有的是不知道需要重复多少次。所以我们需要根据不同的需求来判断到底需要使用哪种循环控制语句,主要包含:for循环, while循环, until循环。以下一次进行说明。

一.until循环

until循环主要写法如下,说明:当condition不满足时会执行,当condition为真时停止循环,往往用于不知道到底需要执行多少次

until condition ; do

commands
done

二.while循环
while循环同until循环一样,用于不可预知循环次数的情况下使用。主要用于condition满足的情况下进行执行:

while condition 
do

commands
done

案例1:将所有的参数打印出来
while [ $# -ne 0 ]; do
echo $1
shift 1-->此命令用于将传入参数的位置往左移动指定数字的位置,例如:传入A、B、C,那么他们分别在$1 $2 $3的位置,shift 1以后B就在$1的位置,C就在$2的位置,$3变空
done

案例2:要求用户输入介于20到10之间的数(不满足条件则一直要求输入)
while :

do

read -p "Enter a number between 20 and 30: " x

case $x in

*[!0-9]*)##判定是否包含非数字的字符,如果是则继续提示

continue

;;

*)

if [ $x -lt 20 ] ; then

continue

elif [ $x -gt 30 ] ; then

continue

else

echo $x && break

fi

;;

esac

done

三.For循环

For循环包含多种写法,可以是字符组也可以是数组等等。各个写法说明如下:
写法一:字符组
for var in Canada USA Mexico
do
 printf "%s\n" "$var"
done

写法二:数字范围(非标准写法)
for ((n=1; n<=10; ++n))
do
 echo "$n"
done

四.跳出循环与重置循环

当某些时候需要在循环体里面控制是否要跳出循环,或者重新开始循环(跳过后续命令)。可以通过break和continue分别实现。

break案例:
 for n in a b c d e
 do
  while true ##循环开始时就指定成死循环
  do 
   if [ $RANDOM -gt 20000 ] ##$RANDOM表示生成一个随机数
   then
    printf .
    break 2 ##跳出while和for两层循环
   elif [ $RANDOM -lt 10000 ]
    then
    printf '''' 
    break ##仅跳出while循环
   fi
  done
done

continue案例:
for n in {1..9}
do

x=$RANDOM
[ $x -le 20000 ] && continue ##当随机数小于等于20000时重新开始新的循环
echo "n=$n x=$x"

done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Shell