精华内容
下载资源
问答
  • until循环 1. if-while语句   while循环是shell脚本中最简单的一种循环,当条件满足时,while重复地执行一组语句;当条件不满足时,就退出while循环。 shell while循环的用法如下: while condition do ...
  • while和until使用

    千次阅读 2017-10-17 13:29:11
    先说说上次在讲case语句用法中提到的在Ubuntu中有时候写的脚本不能正常运行的问题吧,虽然还没搞懂,不过似乎只需要把...今天来看看循环结构while和until使用举例吧 while 测试条件 do  语句1  语句2

    先说说上次在讲case语句用法中提到的在Ubuntu中有时候写的脚本不能正常运行的问题吧,虽然还没搞懂,不过似乎只需要把那个运行不对的脚本删掉重新在建一个然后就可以运行出来了,如果有大神知道这方面的bug的话希望能够指点一下萌新。



    今天来看看循环结构while和until的使用举例吧


    while 测试条件

    do

         语句1

         语句2


    done


    测试条件:条件满足就循环,直到条件不满足就退出循环

    #!/bin/bash
    ##filename:guess_number.sh
    #对被猜的数num进行赋值
    #$RANDOM是一个系统随机数的环境变量,模100运算用于生成1~100的随机整数
    
    num=$((RANDOM%100))
    
    #使用永真循环、条件退出的方式接收用户的猜测并进行判断
    while [ 1 ]   #或((1))或空语句:
    do
            read -p "Please input a number[1..100]:"  user_num
            if [ $user_num -lt $num ]; then
                    echo "The number you inputed is less then my NUMBER."
            elif [ $user_num -gt $num ]; then
                    echo "The number you inputed is greater then my NUMBER."
            elif [ $user_num -eq $num ]; then
                    echo "Congratulate:my NUMBER is $num."
                    break
            fi
    done
    


    until循环 测试条件


         do


            语句1


            语句2


         done

    条件不满足循环,直到满足就退出循环

    #!/bin/bash
    ##filename:until-user_online_to_write.sh
    username=$1
    if [ $# -lt 1 ]; then
            echo "Usage:`basename $0`  <username>  {<message>}"
            exit 1
    fi
    if grep "^$username:" /etc/passwd>/dev/null ; then  :
    else
            echo "$username is not a user on this system."
            exit 2
    fi
    until who|grep "$username" > /dev/null ; do
            echo "$useraname is not logged on."
            sleep 15
    done
    shift;msg=$*
    [[ X"$msg" == "X" ]] && msg="Hello,$username"
    echo "$msg" | write $username
    
    这里先发送消息“Are you ok?”给用户test,然后用户尚未登陆

    登陆用户test,过几秒之后收到之前发送的消息


    展开全文
  • while&until循环详解

    千次阅读 2018-02-10 19:16:24
    循环语句命令常用于执行一条指令或者一组指令,那么直到条件不在满足时停止,在shell脚本中循环语句常见有 while until for select循环语句。 在while循环语句主要用来重复执行一组命令或语句,在企业实际应用中...

    循环语句命令常用于执行一条指令或者一组指令,那么直到条件不在满足时停止,在shell脚本中循环语句常见有 while until for select循环语句。

     

    在while循环语句主要用来重复执行一组命令或语句,在企业实际应用中,常用于守护进程持续运行的程序。

     

     

     

    1、在这么多语句中,while循环有它的语法格式,如下:

     

     

    while <条件表达式>
    do
    	   指令.....
    done

    看到上面的语法感觉还是不明白?没有关系一句话解释:while循环语句会对紧跟在while后面的条件表达式进行判断,那么如果该条件表达式成立,则运行while循环体里面的命令或者语句,每一次执行到done时,就会重新判断while条件表达式是否成立,直到条件表达式不成立时才会退出while循环

    看了解释还是不明白? 没有关系如下:

    #!/bin/bash
    while ((5>3))
    do
            echo "yes yes yes"
    done

    刨析:我们可以看到以上就是一组while循环,那么在while后面跟着 ((5>3)),这个就叫做条件表达式,也就是说,如果5>3成立了,那么执行下面的echo "yes yes yes" 最后当我们的语法执行到了done 它还会继续来判断5是否大于3 那么按照我们上面的while循环,这称为死循环!!! 因为5这辈子都是大于3 那么成立了就会一直输出 yes

     

    输入结果如下:

    好,到这里应该了解了while循环的基本操作了;

     

    2、在这里我们先了解一下linux中的sleep命令,sleep 1代表休息一秒,sleep 2代表休息2秒 如下:

    #!/bin/bash
    while ((5>3))
    do
            sleep 2
            echo "yes yes yes"
    done

    剖析:如果5>3这个条件是成立的,那么在2秒后输出 yes yes yes

     

    3、将负载值追加到log文件中

    #!/bin/bash
    while [ 1 ]
    do
            sleep 2
            date >> /root/log
    done

    在这里date是获取当前的时间,那么在while后面跟了一个 [ 1 ]这个就代表着这个条件永远都是真的。

     

    4、shell脚本在后台运行

    例1:

    解释如下:

    [root@shell-yankerp ~]# sh a.sh &     #运行a.sh 在后台运行
    [1] 66727
    [root@shell-yankerp ~]# fg            #把后台运行的脚本放到前台运行,如果有多个后台运行的话,+编号提出
    sh a.sh
    
    ^Z                                     #使用ctrl + z来暂停当前的脚本任务
    [1]+  已停止               sh a.sh
    [root@shell-yankerp ~]# bg             #使用bg放在后台运行
    [1]+ sh a.sh &
    [root@shell-yankerp ~]# jobs           #使用jobs来查看后台运行的脚本
    [1]+  运行中               sh a.sh &
    [root@shell-yankerp ~]# fg 1           #fg加编号把后台运行的脚本放置前台
    sh a.sh
    ^Z                                    #执行ctrl + z停止脚本任务
    [1]+  已停止               sh a.sh
    [root@shell-yankerp ~]# jobs          #使用jobs来查看后台运行脚本任务
    [1]+  已停止               sh a.sh
    [root@shell-yankerp ~]# kill %1       #使用kill + %编号停止运行任务
    
    [1]+  已停止               sh a.sh
    [root@shell-yankerp ~]# jobs          #jobs再次查看
    [1]+  已终止               sh a.sh
    [root@shell-yankerp ~]#

    图片说明:

     

    4、使用while循环打印5-1

    #!/bin/bash
    
    a=5
    
    while (($a>0))
    do
            echo $a
            ((a--))
    done

    剖析:

    a=5是一个变量

    while  (($a>0)) 也相当于((5>0)) 在这里5肯定>0啊 条件成立

    do

            echo $a   这里就是5  4  3  2  1 直到条件不成立退出循环

            ((a--)) 每一次循环 5就 减去1 那么一直循环到5-1 4-1 3-1 2-1 1-1  那么到了1-1=0了 以上条件 0 > 0 不成立 退出循环

    done

    输出如下:

    [root@shell-yankerp ~]# sh a.sh 
    5
    4
    3
    2
    1
    [root@shell-yankerp ~]#

    应该可以理解,继续使用双中括号演示

    #!/bin/bash
    
    a=5
    
    while [[ $a>0 ]]
    do
            echo $a
            ((a--))
    done

    输出如下:

    [root@shell-yankerp ~]# sh a.sh  
    5
    4
    3
    2
    1
    [root@shell-yankerp ~]# 

    还有[]号  [ $a -gt 0 ] 这里不在做演示~~~

     

     

    二、until循环

    其实until循环和while循环是相反的,也就是说,当条件表达式不成立时,就会进入循环如下:

    #!/bin/bash
    
    a=5
    until [[ $a < 1 ]]
    do
            echo $a
            ((a--))
    done

    以上 a=5 $a就是5   那么在以上语句中5<1不成立那么就会进入循环,也就是它是反着的,输出如下:

     

    需求:从1加到100 请用 1+2+3+4这样的计算,如下:

    #!/bin/bash
    
    a=1
    b=0
    
    while (($a <= 100))
    do
            ((b=b+a))
            ((a++))
    done
    echo $b

    什么意思呢解释如下:

    #!/bin/bash
    
    a=1      #这是一个变量 a=1 那么a就是1
    b=0      #b呢 就是0
    
    while (($a <= 100))      #如果$a <= 100 也就是说 1 <= 100 条件成立 1<=100
    do
            ((b=b+a))        #b=b+a 意思是: b这个变量等于0+1 
            ((a++))  #a++的意思是 循环一次a就+1 如果不加的话那么条件一直成立就是死循环
    done
    echo $b
    
    #==================================================================================================
    
    #计算
    
    b=b+a 相当于 0+1  循环到下面 a++ 也就是1+1=2 执行到done 那么再次循环 这里的a等于2了 那么就是
    
    0+1+2+3+4+5+6+.....

    图片解释

    输出结果如下:

    [root@shell-yankerp ~]# sh a.sh 
    5050
    [root@shell-yankerp ~]#

    希望读者能懂吧,刚开始确实挺绕,慢慢的就好了

     

    while循环到底有什么用,不会就是上面的去加减吧。实战如下:

    1、编写冲手机话费脚本

     

    在书上也有这样的例子,但是我还是按照自己的想法写出来 如下:

    #!/bin/bash
    red_col="\e[1;31m"
    reset_col="\e[0m"
    . /etc/init.d/functions 
    zongjia=30
    duanxin=15
    
    function caidan(){
    cat <<EOF
    ============================
            1.查询话费
            2.发短信
            3.充值话费
            4.退出
    ============================
    EOF
    }
    function panduan(){
            read -p "请您输入你想要的业务:" NUM
            expr $NUM + 1 &>/dev/null
                    if [ "$?" -ne 0 ]
                       then
                            echo  "请您输入{1|2|3|4}"
                       exit 1
                    fi
    }
    
    function cxdx(){
            echo "您好,帅哥,您当前的余额剩余:$zongjia"
    }
    
    function fdx(){
            while :
            do
            if [ "$zongjia" -lt $duanxin ];then
                    action "您当前的余额不足,请充值!!!" /bin/false
                    return 1
            else
                    read -p "请您输入你要发送的内容:" aaa
                    zongjia=$((zongjia-duanxin))
                            echo "发送成功,当前的余额剩余:$zongjia"  
    						return 1
                    fi
    done
    }
    
    function czhf(){
            while :
            do
                    read -p "请您输入你要充值的余额:" bbb
                    expr $bb + 1 &>/dev/null
                    if [ "$?" -ne 0 ];then
                            action "请您输入数值" /bin/false
                    exit 1
                    else
                       zongjia=$((zongjia+$bbb))
                            echo "充值成功,当前的余额剩余:$zongjia"
                            return 1
                    fi
    
    done
    }
    function exit (){
            exit 0
    }
    
    
    function zong(){
    while :
    do      caidan && panduan
            case $NUM in
                    1)
                    cxdx
                    ;;
                    2)
                    fdx
                    ;;
                    3)
                    czhf
                    ;;
                    4)
                    exit 
                    ;;
            esac
    
    done
    }
    zong

    看不懂没关系,解释如下:

    #!/bin/bash
    red_col="\e[1;31m"  #定义red变量 这个就是为了一个红色
    reset_col="\e[0m"    #这个也是
    . /etc/init.d/functions  #加载functions函数库
    zongjia=30     #总价为30元
    duanxin=15     #一条短信为15元
    
    function caidan(){  #定义菜单函数 
    cat <<EOF 
    ============================
            1.查询话费
            2.发短信
            3.充值话费
            4.退出
    ============================
    EOF
    }
    
    function panduan(){     #定义判断函数
            read -p "请您输入你想要的业务:" NUM   #等待用户输入内容赋值给变量NUM
            expr $NUM + 1 &>/dev/null   #判断用户输入的是否是数值
                    if [ "$?" -ne 0 ]   #如果不是数值
                       then   #那么
                            echo  "请您输入{1|2|3|4}"  #输出这条内容
                       exit 1 #最后退出脚本
                    fi
    }
    
    function cxdx(){       #定义查询短信函数
            echo "您好,帅哥,您当前的余额剩余:$zongjia" #echo 输出此内容
    }
    
    function fdx(){ #定义发短信的函数
            while :       #while循环
            do
            if [ "$zongjia" -lt $duanxin ];then #如果总价格小于一条短信的价格
                    action "您当前的余额不足,请充值!!!" /bin/false #那么输出此内容
                    return 1     #退出函数
            else    #否则
                    read -p "请您输入你要发送的内容:" aaa  #等待用户内容赋值给aaa
                    zongjia=$((zongjia-duanxin))        #总价=总价-一条短信的价格
                            echo "发送成功,当前的余额剩余:$zongjia"   #最后输出总价格
                            return 1  #退出此函数
                    fi
    done
    }
    
    function czhf(){  #定义充值话费函数
            while : #while循环
            do
                    read -p "请您输入你要充值的余额:" bbb  #等待用户内容赋值给bbb
                    expr $bb + 1 &>/dev/null     #检查用户输入的是否为数值
                    if [ "$?" -ne 0 ];then    #如果不是数值
                            action "请您输入数值" /bin/false #那么输出一条请您输入数值
                    exit 1 #退出
                    else   #否则
                       zongjia=$((zongjia+$bbb))  #总价=总价+用户输入的价格
                            echo "充值成功,当前的余额剩余:$zongjia" #最后输出总价格
                            return 1 #退出函数和while循环
                    fi
    
    done
    }
    function exit (){   #定义exit退出函数
            exit 0      #退出
    }
    
    
    function zong(){ #定义总的函数
    while :           #while循环
    do      caidan && panduan    #调用菜单函数和判断函数
            case $NUM in      #如果在$NUM这个变量中输入的是以下:
                    1)       
                    cxdx           
                    ;;
                    2)
                    fdx
                    ;;
                    3)
                    czhf
                    ;;
                    4)
                    exit 
                    ;;
            esac
    
    done
    }
    zong #最后调用总的函数

    不够养眼?没有关系,图片如下:

    运行结果如下:

    写的不好请见谅,毕竟不是专业尴尬

     

    希望对您有所帮助吧。再见~~~

     

     

     

    展开全文
  • 主要介绍了linux shell循环,判断介绍,以及实例使用方法,需要的朋友可以参考下
  • 主要介绍了Shell脚本whileuntil循环语句简明教程,简洁易懂的简明教程,需要的朋友可以参考下
  • 主要介绍了Shell中的循环语句for、whileuntil实例讲解,简单清晰明了,非常不错的教程,需要的朋友可以参考下
  • while则是[条件]为真,则执行。 以下测试代码,只变化第4行,可观察执行结果的异同。 -gt是大于的意思。 测试代码: 1 #!/bin/bash 2 # 3 i=0 4 until [ $i -gt 5 ] 5 do 6 let square=i*i 7 echo "...

    until 是[条件]为假,则执行;while则是[条件]为真,则执行。

    以下测试代码,只变化第4行,可观察执行结果的异同。

    -gt是大于的意思。

    测试代码:

     1 #!/bin/bash
      2 #
      3 i=0
      4 until [ $i -gt 5 ]
      5 do
      6     let square=i*i
      7     echo "$i * $i = $square"
      8     let i++
      9 done
     10 exit 0
    

    测试结果: 

    gyz@debian:~/shelltest$ ./until.sh 
    0 * 0 = 0
    1 * 1 = 1
    2 * 2 = 4
    3 * 3 = 9
    4 * 4 = 16
    5 * 5 = 25
    

    测试代码:

    1 #!/bin/bash
      2 #
      3 i=0
      4 while [ $i -gt 5 ]
      5 do
      6     let square=i*i
      7     echo "$i * $i = $square"
      8     let i++
      9 done
     10 exit 0
    

    测试结果:

    gyz@debian:~/shelltest$ ./until.sh 
    gyz@debian:~/shelltest$ 
    

    修改测试代码:

     1 #!/bin/bash
      2 #
      3 i=0
      4 while [ 5 -gt $i ]
      5 do
      6     let square=i*i
      7     echo "$i * $i = $square"
      8     let i++
      9 done
     10 exit 0
    

    测试结果:

    gyz@debian:~/shelltest$ ./until.sh 
    0 * 0 = 0
    1 * 1 = 1
    2 * 2 = 4
    3 * 3 = 9
    4 * 4 = 16
    

     

    展开全文
  • Shell中可以采用while循环来实现需要进行循环的操作。 语法结构如下: while exp do command done 执行过程:while将测试exp的返回值,如果返回值为true则执行循环体的命令,返回值为false则不执行循环。循环...

    Shell中可以采用while循环来实现需要进行循环的操作。

    语法结构如下:

    while exp

    do

    command

    done

    while循环的格式

    1. while expression
    2. do
    3. command
    4. command
    5. ```
    6. done

    执行过程:while将测试exp的返回值,如果返回值为true则执行循环体的命令,返回值为false则不执行循环。循环完成后会进入下一次循环之前将再次测试。

    如果已知循环次数,可以用计数的方式控制循环,在达到规定的循环次数后退出循环。

    示例:

    #同时计算1到100和以及1到100的奇数和

    #脚本内容如下:

    sum1=0

    sum2=0

    i=1

    j=1

    while [[ "$i" -le "100" ]]

    do

    let "sum1+=i"

    let "j=i%2"

    if [[ $j -ne 0 ]];then

    let "sum\+=i"

    fi

    done

    echo "$sum1"

    echo "$sum2"

    输出结果:

    5050

    2500

    示例2使用while命令按行读取文件(实用)

    cat data.txt

    内容如下:

    小明 男 30

    小张 男 25

    小丽 女 28

    #脚本内容如下:

    #!/bin/bash

    while read Line

    do

    Name=`echo $Line' | awk '{print $1}'`

    Sex=`echo $Line' | awk '{print $2}'`

    Age=`echo $Line' | awk '{print $3}'`

    echo "我的名字是 $Name ,性别 $Sex 年龄 $Age "

    done < data.txt

    或者

    #!/bin/bash

    cat data.txt | while read Line

    do

    Name=`echo $Line' | awk '{print $1}'`

    Sex=`echo $Line' | awk '{print $2}'`

    Age=`echo $Line' | awk '{print $3}'`

    echo "我的名字是 $Name ,性别 $Sex 年龄 $Age "

    done

    输出结果:

    我的名字是小明,性别男,年龄30

    我的名字是小张,性别男,年龄25

    我的名字是小丽,性别女,年龄28

     

    展开全文
  • 1 while【满足条件就执行】 #!/bin/bash sum=0 i=1; #当i<=100时执行while [ $i -le 100 ] do sum=$(($sum+$i)) i=$(($i+1)) done ech...
  • 使用while和until 这是我们在霍格沃茨大学的第一年,我们正在努力掌握“ Wingardium Leviosa”的悬浮魅力。 目前,我们的悬浮力为6 。 为了使该羽毛真正悬浮,我们需要有10的悬浮力。 首先,我们将编写一个while...
  • 文章目录一:shell循环语句1.1:for 循环1.11:示例:登录账号第一列1.12:示例:姓名列表批量创建账户语法2:1.13:示例:1...如1*11.3:continuebreak区别1.4:untli循环语句1.41:计算1-20的1.42:until语句应用
  • VBA-Do Until Do while

    千次阅读 2020-02-12 21:53:51
    'until直到条件成立时,停止循环 'while当条件成立时,则开始循环 Do Until num >3 num = num + 1 MsgBox num Loop End Sub ============================================ Sub doWhile() Dim num% 'un...
  • 1 while循环 while循环是Shell脚本中最简单的一种循环,当条件满足时,...(1)先对condition进行判断,如果该条件成立,就进入循环体,执行 while 循环体中的语句,也就是dodone之间的语句,这样就完成了一次循环
  • 流程控制 while/until 循环

    千次阅读 2020-10-23 09:20:52
    使用循环读取文件 while until 能够处理标准输入。这就可以使用 while until 处理文件。在下面的例子中, 我们将显示在前面章节中使用的 distros.txt 文件的内容: #!/bin/bash # while-read: read lines ...
  • for 1.for循环 for var(方法) in list do ...使用双引号来处理 ...while ...while [ $var -gt 0 ] ...while [ $n -gt 50 ] ...只要测试条件成立,while命令就会...until命令和while命令工作的方式完全相反,条件成立时结束。
  • until命令和while命令工作的方式完全相反。until命令要求你指定一个通常返回非零退出状态码的测试命令。只有测试命令的退出状态码不为0,bash shell才会执行循环中列出的命令。 格式如下: until test ...
  • 使用while和until 这是我们在霍格沃茨大学的第一年,我们正在努力掌握“ Wingardium Leviosa”的悬浮魅力。目前,我们的悬浮力为6 。为了使该羽毛真正悬浮,我们需要有10的悬浮力。 首先,我们将编写一个while循环,...
  • 使用while和until 这是我们在霍格沃茨大学的第一年,我们正在努力掌握“ Wingardium Leviosa”的悬浮魅力。目前,我们的悬浮力为6 。为了使该羽毛真正悬浮,我们需要有10的悬浮力。 首先,我们将编写一个while循环,...
  • while循环  while CONDITION; do  循环体  done  进入条件:CONDITION为true  退出条件:false until循环  until CONDITION; do  循环体  done  进入条件:CONDITION为false  退出条件:...
  • Shell While循环和until循环while循环while循环例题until 循环until循环例题 while循环 while循环是循环语句的一种,循环依据是条件表达式的值,当条件表达式的值为真时,while语句将循环执行循环体中的命令,直至...
  • shell有三种循环:for循环,while循环和until循环。 for命令 for循环命令用于根据项目清单确定的次数执行命令。例如,你可以根据文件或者用户清单执行相同的命令。for命令后面紧跟着用户自定义变量-关键字in,然后是...
  • 处理循环次数是固定的使用for循环,循环次数不固定则用while或者until wait命令是等待其他命令执行完成后在执行其他命令,仅限于后台程序 1.while语句结构 ​ while 条件测试 ​ do ​ 循环体 ​ done ​ 当...
  • while命令某种意义上是 if-then语句for循环的混合体。while命令允许定义一个要测试的命令,然后在循环执行一组命令,只要定义的测试命令返回的是退出状态码0。它会在每次迭代的一开始测试test命令。在test命令返回...
  • for语句 #!/bin/bash sum=0 for ((x=1;x<=100;x++)) do sum=$((sum=sum+x)) done echo "$sum" while语句 #!/bin/bash x=1 y=0 while [ $x -le 100 ] do y=$(( $y + $x )) ...until语句 #!/bin/...
  • shell浅谈之三for、whileuntil循环

    千次阅读 2018-01-10 14:31:11
    转载地址: ... Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for、while和untilwhile循环for循环属于“当型循环”,而until属于“直到型循环”。循环控
  • 流程控制:while/until循环

    千次阅读 2016-07-08 10:49:01
    while循环输出1到5的数字,while的命令语法是:while commands; do commands; done具体demo如下:#!/bin/bash #while-count:display a series of numbers count=1 while [ $count -le 5 ]; do echo $count count=$...
  • 思路 1)创建用户语句:useradd -u | useradd -d 2)使用循环语句(until)批量创建用户 3)判断用户前5个后5个,条件判断语句 3.落地实现 if [ -d /rhome ];then echo "/rhome目录已存在" else mkdir /rhome && echo...
  • Linux whileuntil循环语句

    千次阅读 2019-04-02 21:04:11
    while循环 也称为前测试循环语句,重复次数是利用一个条件来控制是否继续重复执行这个语句。为了避免死循环,必须保证循环体中包含循环出口条件即表达式存在退出状态为非0的情况。 (1)计数器控制的while循环(注意...
  • 主要介绍了linux shell下常用的循环for、whileuntil的用法,这也是脚本之家小编看到的比较详细的文章了,感兴趣的朋友可以参考一下,最好是在环境下自己手工打一份,不要复制

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 181,751
精华内容 72,700
关键字:

while和until的使用