精华内容
下载资源
问答
  • 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,过几秒之后收到之前发送的消息


    展开全文
  • ruby-while和until修饰符

    2019-09-02 22:19:58
    下面有一种计数到10的稍微简短的方式,在修饰符的位置使用until修饰符 n=1 n=n+1 until n!==10 puts "we readched 10" ...在代码尾部使用while until 的使用方式,与结合使用 begin/end 的方式有所不同 a=...
    下面有一种计数到10的稍微简短的方式,在修饰符的位置使用until修饰符
          n=1
          n=n+1 until n!==10
          puts "we readched 10"
          uniti 语句的地方,也可以使用 while n<10替换。在代码尾部使用while 和 until 的使用方式,与结合使用 begin/end 的方式有所不同
           a=1
           a+=1 untile true
           a仍然为1,a+=1语句并没有执行。
    
    展开全文
  • 平时工作中有不少重复工作,并且无法统计需要循环该执行多少次,这个时候就需要while或者until循环语句帮助你解决一些繁琐重复性工作。而case 语句是匹配一个值或一个模式,如果匹配成功,执行相匹配命令。...

    一、简介

    平时工作中有不少重复的工作,并且无法统计需要循环该执行多少次,这个时候就需要while或者until循环语句帮助你解决一些繁琐重复性的工作。而case 语句是匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。一般我们脚本会用到这个多分支选择结构。本章节就是介绍以上3个语句的简单入门用法。

    二、shell循环语句

    1.while循环语句

    最常见的一种满足条件就进入循环的语句, 当条件满足时,while 重复地执行一组语句,直到条件不满足时,才退出 while 循环。

    语法:

    PS:【判断条件请查看shell的条件判断语句相关知识】

    while 循环的执行流程:

    首先是对条件进行判断,如果条件成立,进入循环,执行 while 循环体中的语句(是 do 和 done 之间的语句,这样就完成了一次循环)

    每一次执行到 done 的时候都会重新判断条件是否满足,如果满足,就进入下一次循环,继续执行 do 和 done 之间的语句,如果不满足,就结束整个 while 循环,执行 done 后面的其它 Shell 代码或者直接退出。

    例子1: 批量创建用户

    运行结果:

    例子2:计算从1加到1000的和

    执行结果:

    可以看到while语句的应用只是简单的一个循环语句,文本只是举一个简单的例子说明来展示while语句,实现复杂的工作还是需要熟悉条件判断语句,这样才能更好地写出脚本。
     

    2.until循环语句

    和while实现同样的功能,但是流程不一样,是一种不满足条件就执行循环的语句,直到条件满足就退出循环。

    语法:

    until循环的执行流程:

    首先是条件进行判断,如果条件不满足,进入循环,执行until循环体中的语句(是 do 和 done 之间的语句,可能是多个语句,这样就完成了一次循环)

    每一次执行到 done 的时候都会重新判断条件是否不满足,如果不满足,就进入下一次循环,继续执行 do 和 done 之间的语句,如果满足,就结束整个until循环,执行 done 后面的其它 Shell 代码或者直接退出。

    例子1: 批量创建用户(和while对比一下)

    ​​​​​​​

    三、shell分支结构语句

    1.分支结构:case语句(根据变量的不同取值 ,执行不同的操作)通常case结构和shell函数一起使用,给源码服务编写启动脚本。case 语句和 if...elif...else 语句,同一种类型都是多分支条件语句。

    2.语法:

    3.case 语句的工作流程:

    case语句会取出变量中的值(就是你在命令行输入的值),然后与语句体中每个分支的值逐一匹配。如果数值匹配,则执行对应分支的程序;如果数值不匹配,则依次进行下一个值的匹配;如果所有的值都不匹配则执行"*)","*"代表所有其他值中的程序,一般是写明变量有哪些可以填写。

    4.注意点

    (1)case 语句以"case"开头,以"esac"结尾。

    (2)在每个分支程序之后要以";;"(双分号)结尾,代表该程序段结束。

    5.例子

    (1)Ubuntu系统中iptables是没有启动脚本的,我们可以通过case语句做一个简单的开启关闭脚本。定义Iptables配置存放位置/etc/iptables.rule【我做了一下基本的预设置】

    ​​​​​​​

    执行结果如下:

    这样设置了iptables的启动脚本是不是方便多了,只需要去修改配置文件,重启iptables脚本即可生效。按照这样的例子,自己可以把一些源码包的程序制作成一个启动脚本,赶紧去试一试吧!

     

    睿江云官网链接:https://www.eflycloud.com/home?from=RJ0036

    展开全文
  • shell while循环工作中使用的不多,一般适用于守护进程程序或始终循环执行场景,其他循环计算等。 while条件句: 语法: while 条件 do 指令… done ok,我们测试一下: 测试:每隔2秒屏幕输出系统...

    shell while循环工作中使用的不多,一般适用于守护进程程序或始终循环执行场景,其他循环计算等。

    while条件句:

    语法:

    while 条件
             do
              指令…
    done

     ok,我们测试一下:

    测试:每隔2秒屏幕输出系统负载值。

    [root@bqh-118 scripts]# vim while.sh 
    while true    #条件为真时,也可以用 "[1]"代替
    do
      uptime      #查看系统负载情况
      sleep 2     #2秒后
    done

    提示:while true 表示条件永远为真,因此会一直运行,像死循环一样,每隔2秒查看一下系统负载情况,但我们称呼为守护进程。

    接下来我们来一个稍微难一点的:计算从1+到100之和(1+2+3+4+......100)的方法

    [root@bqh-118 scripts]# vim while1_100sum.sh 
    #!/bin/sh
    #no.1
    i=1
    sum=0
    while [ $i -le 100  ]  #当i小于100时,往下执行
    do
     ((sum=sum+i))         #sum+变量i
     ((i++))               #执行一次循环i+1,直到条件不成立为止。
    done
    echo $sum              #输出总和sum
    #no.2                        #数据公式计算 
    a=100
    ((sum=a*(a+1)/2))
    echo $sum

    更多方法详情去:https://blog.51cto.com/oldboy/767862

    ================================================================

    until循环语句:until应用场景不多。(属于先执行后判断,类似于先上车,后补票。)

    语法:

    until 条件
             do
              指令...
    done

    测试:

    [root@bqh-118 scripts]# vim while1_100sum.sh 
    #!/bin/sh
    a=5
    until [[ $a < 1 ]]  #当a不小于1时,执行循环,注意判断是单[]须转义加\或用其他方法
    do
      echo "My name is bqh!"
      ((a--))                  #执行一次循环变量a递减一次
    done

    提示:以上语句中5<1不成立那么就开始循环,直到小于1时停止,注意要用"[[]]"或"-lt"判断

    ok,我们来调整一个实战测试吧:

    1、编写手机业务一键服务脚本

     

      1 [root@bqh-118 scripts]# vim sjyjcx.sh 
      2 #!/bin/sh
      3 #date:2019-04-25
      4 #author:aゞ锦衣卫
      5 #script function:Mobile phone recharge query service
      6 menu() {          #定义菜单函数
      7  cat <<bqh
      8 ==========================================
      9     Mobile phone recharge query service   
     10 ------------------------------------------
     11      1.话费充值                           
     12      2.余额查询                           
     13      3.发送短信                           
     14      4.退出服务                           
     15                          
     16                          author:aゞ锦衣卫
     17                          date:2019-04-25  
     18 ==========================================
     19 bqh
     20 }
     21 
     22 TOTAL=0      #定义总额
     23 MSG=1        #定义一条短信1元
     24 green='\e[1;32m'       #绿色
     25 red='\e[1;31m'         #红色
     26 yelow='\e[1;33m'       #黄色
     27 shan='\e[31;5m'        #闪烁红
     28 res='\e[0m'            #清除颜色
     29 
     30 judge() {     #定义判断函数
     31  read -p "请输入您要办理的业务:" num
     32  expr $num + 1 &>/dev/null
     33    if [ "$?" -ne 0 ];then
     34       echo -e "${shan}请您输入{1|2|3|4}${res}"
     35       exit
     36    fi
     37 }
     38 
     39 recharge() {     #定义充值话费函数
     40  while  :
     41   do
     42    read -p "请输入您要充值的金额:" a
     43    expr $a + 1 &>/dev/null           #检测变量a是否为整数
     44    if [ "$?" -ne 0 ];then
     45         echo -e "${shan}充值失败!${res}"
     46         echo -e "${shan}请输入数值!${res}"
     47         exit 2
     48    else
     49         ((TOTAL+=a)) && echo "充值中....." && sleep 1
     50         echo -e "${green}充值成功!\n目前您的余额为$TOTAL元!${res}"    
     51         return 1   #退出当前函数
     52    fi
     53   done
     54 }
     55 
     56 query() {   #定义查询余额函数
     57    echo -e "${green}您好!您当前的余额为:$TOTAL元${res}"
     58 }
     59 
     60 sending_sms() {   #定义发送短信函数
     61    if [ "$TOTAL" -lt "$MSG" ];then   #判断是否有足够的钱支持本次发送短信服务
     62         echo -e "${shan}很抱歉,由于您余额不足本次发送,请您及时充值。${res}"
     63    else
     64         read -p "请输入您要发送的内容:" txt
     65         read -p "您确定是否发送?{y/n}" select
     66 case "$select" in     #判断用户最终是否确定发送短信
     67         [yY]|[yY][eE][sS])
     68         echo -e "${yelow}$txt${res}"&& echo "正在发送......"
     69         sleep 1
     70         echo -e "${green}发送成功!${res}"
     71 ;;
     72         [nN]|[nN][oO])
     73         echo -e "${green}取消发送!${res}"
     74 ;;
     75         *)
     76         echo -e "${shan}很抱歉,由于您操作有误,暂不支持本次发送!${res}"
     77 ;;
     78 esac
     79    fi
     80 }
     81 
     82 server() {   #定义办理业务函数
     83 while :
     84 do
     85   menu && judge
     86     case "$num" in     根据用户输入的变量num,并给出相应的服务。
     87         1)       
     88         recharge
     89 ;;
     90         2)
     91         query
     92 ;;
     93         3)
     94         sending_sms
     95 ;;
     96         4)
     97         echo -e "${green}感谢您使用一键查询服务。${res}"
     98         exit 177
     99 ;;
    100 
    101         *)
    102         echo -e "${shan}请您输入{1|2|3|4}${res}"
    103         exit 188
    104 ;;
    105      esac
    106 done
    107 }
    108 server     #调用办理业务函数

    执行效果如下:

     ------------------------------------------------------------------------------------------------------------------------------------

    各语句常用于场景:

    条件表达式:简单的判断(文件是否存在/字符串是否为空等等)

    if语句:取值判断,不同值数量较少的情况

    while:守护进程、无限循环(sleep)

    case:服务启动脚本、菜单等

    for:正常的循环处理,最常用。

    while 循环总结:

    1、while 循环的特征是执行守护进程以及我们希望可持续执行的环境,用于频率小于1分钟的循环处理,其他的while循环几乎都可以被for循环代替。

    2、几乎所有的case语句都可以用if语句代替,case语句常用于系统脚本启动,其他普通判断多用于if语句。

    3、if和for语句最常用,其次while(守护进程)和case(服务启动脚本)。

    ·····································································································································

    因小柏目前水平有限,正在努力学习中,写的不好,路过的大佬多多指教,谢谢。

    转载于:https://www.cnblogs.com/su-root/p/10765286.html

    展开全文
  • 10.1 当型直到型循环语法while时条件表达式成立之后,会进入循环体里面执行,不成立时退出,until循环语句用法于while类似,区别在于在条件表达式不成立时候,进入循环执行指令,条件表达式成立时,终止循环。...
  • 前文中介绍for循环,在使用时必须先建立一个元素列表,以决定循环次数,但是考虑下面这个例子:如果用户输入“quit”就退出程序,否则将用户输入...要解决这个问题,就需要引入一个新机制:while和until。whil...
  • 通过使用关键字while和until,条件便可以实现。这两个关键字可以有很多使用方式。完全依赖用户 while while关键字在指定条件为真情况下执行一个循环。以while开始一块区域必须使用end来结束它。在while和 end...
  • 10数字四种办法1.1.5:shell中let命令1.2:while循环语句1.2.1:while语句结构1.2.2:while语句应用示例1.2.3:while死循环1.2.4:使用while批量添加用户1.2.5:猜商品价格游戏1.3:continuebreak1.3.1:...
  • 前言:/etc/passwd文件保存了每一个系统用户登入用户基本信息,你是否真正了解它每一个字段意义呢? 详细讲解/etc/passwd文件内容 查看/etc/passwd文件内容 [root@7 ~]# cat /etc/passwd root:x:0:0:root...
  • for、whileuntil

    2020-11-17 23:37:21
    目录循环语句的意义for语句使用方法While语句while作用使用规则while和for使用场合区别until循环语句until作用while和until的区别 循环语句的意义 条件需要你预先已经知道会出现哪些情况,根据情况做出措施。 循环的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 436
精华内容 174
关键字:

while和until的使用