最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【七日打卡】看了保证会系列,学习 Bash 中的循环控制

    正文概述 掘金(孟太白)   2021-01-15   497

    【七日打卡】看了保证会系列,学习 Bash 中的循环控制

    在上一篇文章中添加了 Bash 脚本中的基本语法已经逻辑判断 if if-else if-elif-else,在本章节中你将学习到 Bash 中的循环逻辑,包括:

    • for
    • while
    • until
    • 使用 continue break 控制循环

    循环

    在常用的逻辑交互中,自然不能少了循环的逻辑,巧妙的使用循环,能够节省不少的开发时间呢

    for

    for 允许类每一次循环的时候执行判断命令,如果执行结果通过则执行该次循环。

    格式

    for NAME [ in LIST ]; do
      [COMMAND]
    done
    

    示例 1:

    #!/bin/bash
    
    # Echo list with space deviced
    users='mengj guom tj'
    for user in ${users}; do
      echo ${user}
    done
    

    使用 for 循环默认使用 作为 LIST 的分隔符,上面的示例中可以在终端中输出列表中的每一项。

    mengj
    guom
    tj
    

    示例 2:

    默认的分隔符是 ,因此我们可以通过更改列表的分隔符,更改分隔符通过声明 IFS(Internal FIeld Seprator) 来打印不同的 LIST 子元素。

    list='mengj,guom,tj'
    IFS=,
    for item in ${list}; do
      echo ${item}
    done
    

    上面的示例中我们声明了分隔符 IFS,,因此输出的结果和示例 1 的结果相同

    mengj
    guom
    tj
    

    示例 3:

    同时我们也可以通过声明列表的范围,来实现控制 for 循环的遍历次数,声明返回需要使用 {} ,花括号内部是符合 Unix 的参数范围约定, 即 {1..10} 代表的是 1 - 10。

    # Echo range numbers
    for num in {1..10}; do
      echo ${num}
    done
    

    示例 3 输出的结果是从 1 开始一直输出到 10 为止,需要注意的是在 Bash 的使用 echo 默认在结果后添加 \n 回车符

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    

    示例 4:

    同时 for 循环的列表也可以是多个字符串以 () 包裹的数组形式。

    # Echo array
    array=('mengj' 'guom' 'tj')
    for item in ${array[@]}; do
      echo ${item}
    done
    
    for item in ${array[*]}; do
      echo ${item}
    done
    

    在示例 4 中,我们看到使用了 ${array[@]}${array[*]},这两种形式都是代表的数组本身哦

    示例的内容可以从 GitHub 中查看源代码,传送门。

    while

    while 的代码格式和 if 相似,不同的是 while 能够重复的执行逻辑判断。

    格式

    while [CONDITION]
    do
      [COMMANDS]
    done
    

    示例:

    执行指定的循环10次。

    #!/bin/bash
    
    counter=1
    while [[ ${counter} -lt 10 ]]; do
      echo ${counter}
      ((counter++))
    done
    
    

    在 GitHub 中查看源代码,传送门。

    until

    until 的循环判断和 while 相比更加的简单,until 在执行命令的前提下需要执行测试命令。

    示例:

    #!/bin/bash
    
    counter=1
    until [[ ${counter} -gt 10 ]]; do
      echo ${counter}
      ((counter++))
    done
    
    

    我们可以比较一下 untilwhile 循环的不同之处,while 循环使用的是判断条件,而 until 使用的是测试命令,从输出结果中可以看出两个命令的执行结果是相同的。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    

    until 的示例源代码已经放在了 GitHub 中,传送门。

    循环控制

    循环控制主要讲述 continuebreak,从字面意思中我们可以看到 continue 是继续的意思,其实 continue 命令是跳过本次循环,然后开始下次循环;而 break 字面上意思是打断的意思,因此 break 的命令是中断循环,执行循环后面的内容。

    示例 1:

    
    
    #!/bin/bash
    
    # 通过使用 while 循环和 case 配合 break 进行循环控制
    
    while true; do
    echo "On which topic do you want advice?"
    echo "1.  politics"
    echo "2.  startrek"
    echo "3.  kernelnewbies"
    echo "4.  sports"
    echo "5.  bofh-excuses"
    echo "6.  magic"
    echo "7.  love"
    echo "8.  literature"
    echo "9.  drugs"
    echo "10. education"
    echo
    
    echo -n "Enter your choice, or 0 for exit: "
    read choice
    echo
    
    case $choice in
         1)
          echo 'politics'
         ;;
         2)
          echo 'startrek'
         ;;
         3)
          echo 'kernelnewbies'
         ;;
         4)
         echo 'sports'
         ;;
         5)
          echo 'bofh-excuses'
         ;;
         6)
          echo 'magic'
         ;;
         7)
          echo 'love'
         ;;
         8)
          echo 'literature'
         ;;
         9)
          echo 'drugs'
         ;;
         10)
          echo 'education'
         ;;
         0)
         echo "OK, see you!"
         break
         ;;
         *)
         echo "请从 0 - 10 中选择你喜欢的某一项"
         ;;
    esac  
    done
    
    

    该示例中使用 whilecase 来打印用户选择的结果,如果输入 0 则通过使用 break 退出循环,查看源代码的传送门。

    示例 2:

    使用 continue 命令来输出 0 - 10, 如果能被 3 整除则跳过此次循环,只输出不能被 3 整除的数字。

    #!/bin/bash
    
    for i in {1..10}; do
      if [ $(( ${i} % 3 )) -eq 0 ]; then
        continue
      fi
      
      echo ${i}
    done
    
    

    示例的代码中通过使用 for 来打印 1-10 的数字,如果是 3 的倍数则使用 continue 跳过输出,输出的结果如下:

    1
    2
    4
    5
    7
    8
    10
    

    输出的结果中没有 3 6 9 这 3 个数字,可以在我的 GitHub 中查看并下载源代码执行测试哦,传送门。


    起源地下载网 » 【七日打卡】看了保证会系列,学习 Bash 中的循环控制

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元