shell编程之七(while循环与until循环)

while循环与until循环介绍

#while循环工作流程
    1、先判断循环条件是否成立,成立表示exprsiion的退出状态为0,则执行循环体
    2、注意:为了避免死循环,必须保证在循环体中包含循环出口条件,即存在exprssion的退出状态为非0的情况

#until循环(与while循环相似)
    1、当exprssion的退出状态不为0是,执行循环体

#写法示例
while exprsiion     #until exprssion
do
    command
done

while循环可分为四类

    计数器控制的while循环
    结束标志控制的while循环
    标志控制的while循环
    命令行控制的while循环

计数器控制的while循环

counter=1
while exprssion
do
    command
    let "command"
    ....
done

例子:计算1到100内所有奇数的和

i=1
sum=0
while (( i<100 ))
do
    let "sum+=i"
    let "i+=2"
done
echo "$sum"

结束标志控制的while循环

(结束是让exprssion的退出状态非0,用于用户不知道结束标志时)

read variable
while [[ "$variable" != sentinel ]]
do
    command
    read variable
done

例子,猜数字游戏

echo "这是一个猜数字的游戏"
echo "请输入一个数字,区间为1-10"
read suzi
while [[ "$suzi" != 5 ]]
do
    if [ "$suzi" -gt 5 ];then
        echo "您输入的数字略大哟"
        echo -e "\t请重新输入猜测数字"
        read suzi
    else
        echo "您输入的数字略小哟"
        echo -e "\t请重新输入猜测数字"
        read suzi
    fi
done
echo "恭喜您,猜对啦,正确答案是5"

标志控制的while循环

(本质根结束标志控制的while循环差不多,只是这里用户知道结束的标志)

signal=0
while (( signal != 1 ))
do
    if exprssion
    then
        signal=1
    fi  
done

例子,同样也是猜数字游戏

echo "这是一个猜数字的游戏"
echo "请输入一个数字,区间为1-10"
read num

signal=0
while [[ "$signal" != 1 ]]
do
    if [ "$num" -ne 5 ];then
        if [ "$num" -lt 5 ];then
            echo "对不起,您输入的数字略小哟"
            echo -e "\t请重新输入猜测数字"
            read num
        else
            echo "对不起,您输入的数字略大哟"
            echo -e "\t请重新输入猜测数字"
            read num
        fi
    else 
        signal=1
        echo "恭喜您,猜对啦,正确答案是5"
    fi
done

命令行控制的while循环

有时需要命令行来指定输出参数和参数个数,这时用其他三种形式的while循环都无法实现,所以要使用命令行控制的while循环,该模式下,while循环通常与shift结合起来使用,其中,shift命令使位置变量下移一位(即$2代替$1,$3代替$2),并且使$#变量递减,当最后一个参数也显示给用户后,$#就变成0,同时$*也等于空。

while [[ "$*" != "" ]]
do
    echo "$1"
    shift
done

#例子
echo "您输入了 $# 个参数"
echo "当前输入的内容是"
while [[ "$*" != "" ]]
do
        echo "$1"
        shift
done
cat /root/ip.txt | while read line
do

  for A in {0..255}
  do
    echo "Host = $line.$A, netmask=255.255.255.0, ctrl=00000000, gateway_ip=$line.1 " >> ok.txt
  done

done

无限循环

#第一种
while :
do
    command
done

#第二种
while true
do
    command
done
微信打赏微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2022/11/20作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???