Linux while,until循环语句

while循环
也称为前测试循环语句,重复次数是利用一个条件来控制是否继续重复执行这个语句。为了避免死循环,必须保证循环体中包含循环出口条件即表达式存在退出状态为非0的情况。

(1)计数器控制的while循环(注意代码中的空格)

#!/bin/bash  
  
sum=0  
  
i=1  
  
while (( i <= 100 ))  
do  
     let "sum+=i"  
     let "i += 2"     
done  
  
echo "sum=$sum"  

指定了循环的次数500,初始化计数器值为1,不断测试循环条件i是否小于等于100。在循环条件中设置了计数器加2来计算1~100内所有的奇数之和。
(2)结束标记控制的while循环(注意每一个空格)
设置一个特殊的数据值(结束标记)来结束while循环。
//算是找数字的游戏吧,只不过数字得自己写

#!/bin/bash  
  
echo "Please input the num(1-10) "  
read num  
  
while [[ "$num" != 4 ]]  
do   
   if [ "$num" -lt 4 ]  
   then  
        echo "Too small. Try again!"  
        read num  
   elif [ "$num" -gt 4 ]  
   then  
         echo "To high. Try again"   
         read num  
   else  
       exit 0  
    fi  
done   
  
echo "Congratulation, you are right! "  

例:通过结束标记控制实现阶乘的操作
计算阶乘的例子

#!/bin/bash  
  
echo "Please input the num "  
read num  
  
factorial=1  
  
while [ "$num" -gt 0 ]  
do  
    let "factorial= factorial*num"  
    let "num--"  
done  
  
echo "The factorial is $factorial"  

(3)标志控制的while循环
使用用户输入的标志值来控制循环的结束(避免不知道循环结束标志的条件)。

#!/bin/bash  
  
echo "Please input the num "  
read num  
  
sum=0  
i=1  
  
signal=0  
  
while [[ "$signal" -ne 1 ]]  
do  
    if [ "$i" -eq "$num" ]  
    then   
       let "signal=1"  
       let "sum+=i"  
       echo "1+2+...+$num=$sum"  
    else  
       let "sum=sum+i"  
       let "i++"  
    fi  
done  

标志控制的while循环求1~n的累加和,循环变量值小于100执行else累加同时循环变量加1,直到循环变量值等于100将标志值设置为1,并输出。
标志控制的while循环与结束标记控制的while循环的区别是用户无法确定无法确定结束标志,只能程序运行后确定结束标志。两者也可以相互转化。
(4)命令行控制的while循环
使用命令行来指定输出参数和参数个数,通常与shift结合使用,shift命令使位置变量下移一位($2代替$1、$3代替 2 使 2,并使 #变量递减),当最后一个参数显示给用户,KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲会等于0,*也等于空。

#!/bin/bash  
  
echo "number of arguments is $#"  
  
echo "What you input is: "  
  
while [[ "$*" != "" ]]  
do  
    echo "$1"  
    shift  
done  

$num: num为从1开始的数字,$1是第一个参数,$2是第二个参数…
$*: 所有的位置参数(作为单个的字符串)
$#: 传入脚本的参数的个数

循环条件可以改写为while[[ “$#” -ne 0 ]],等于0时退出while循环

until循环
until命令和while命令类似,while能实现的脚本until同样也可以实现,但区别是until循环的退出状态是不为0,退出状态是为0(与while刚好相反),即whie循环在条件为真时继续执行循环而until则在条件为假时执行循环。

#!/bin/bash  
  
i=0  
  
until [[ "$i" -gt 5 ]]    #大于5  
do  
    let "square=i*i"  
    echo "$i * $i = $square"  
    let "i++"  
done  

猜你喜欢

转载自blog.csdn.net/weixin_44545549/article/details/88981268
今日推荐