文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Bash 初学者系列 8:bash 中的循环

编程小独行侠

编程小独行侠

2024-04-23 23:27

关注

  循环是 bash 脚本中一个很重要的功能,用途广泛。本篇文章我们介绍三种不同的循环,然后利用循环遍历数组。

  for 循环

  for 循环有两种不同的写法:

  1.c 语言样式的 for 循环;

  2.列表中使用的 for 循环。

  c 语言样式的 for 循环

  如果你熟悉 c 或者 c++等编程语言,那么对于如下循环应该不会陌生:​

  复制

  1.  for ((initialize ; condition ; increment)); do [COMMANDS]done

  根据上述语法,我们写一个例子,打印 Hello Friend 十次:​

  复制

  1.  for ((i = 0 ; i < 10 ; i++)); doecho "Hello Friend"done

  上述代码中,首先将整型变量 i 初始化为 0,然后设置循环条件(i<10),如果条件为真,则执行循环,打印 Hello Friend,并将变量 i 递增 1,然后进行下一次循环,知道 i<10不再满足。​

  复制

  1.  $ bash hello.sh Hello FriendHello FriendHello FriendHello FriendHello FriendHello FriendHello FriendHello FriendHello FriendHello Friend

  列表中使用的 for 循环

  列表循环是 for 循环的一种变体,这在处理列表或者数组的时候特别方便,其语法如下:​

  复制

  1.  for item in [LIST]; do [COMMANDS]done

  比如,我们重写一下上面的那个例子:​

  复制

  1.  for i in {1..10}; doecho "Hello Friend"done

  另一个例子,下面脚本 var.sh 将打印在 /var 目录下的所有文件和目录:​

  复制

  1.  #!/bin/bash

  2.  for i in /var/*; doecho $idone

  执行一下,其输出如下:​

  复制

  1.  $ ./var.sh/var/backups/var/cache/var/crash/var/lib/var/local/var/lock/var/log/var/mail/var/metrics/var/opt/var/run/var/snap/var/spool/var/tmp

  while 循环

  while 循环是 bash 中另一个应用很广泛的循环,其语法如下:​

  复制

  1.  while [ condition ]; do [COMMANDS]done

  作为演示,我创建一个名为 3x10.sh 的脚本,用于打印前10个3的倍数:​

  复制

  1.  #!/bin/bash

  2.  num=1while [ $num -le 10 ]; doecho $(($numnum=$(($num+1))done

  其执行结果如下:​

  复制

  1.  $36912151821242730

  上述脚本中,首先将变量 num 初始化为 1,然后设定循环条件为 num 小于或等于 10。在循环体中,打印 num 乘以 3,然后将 num 递增 1。

  until 循环

  如果你有 c/c++ 编程背景,那你可能会不自觉的找 do-while 循环。但是,在 bash 中并不存在 do-while 循环。

  bush 中存在另一种循环,即 until 循环,其与 while 循环具有相同的语法:​

  复制

  1.  until [ condition ]; doCOMMANDS]Done

  until 循环与 while 循环之间的主要区别在于循环条件。当循环条件为真时,while 循环会继续,但是,当循环条件为假时,until 循环才会继续。

  比如上面我们写的 3x10.sh 脚本,我们使用 until 循环来实现,如下:​

  复制

  1.  #!/bin/bash

  2.  num=1until [ $num -gt 10 ]; doecho $(($numnum=$(($num+1))done

  大家应该可以注意到,上面的循环条件为 $num -gt 10,为前一个例子中 -le 的否定。

  循环的具体应用

  上面我们介绍了 bash 中循环的用法,下面在实际例子中介绍一下循环的使用。

  打印数组的内容

  在此之前,我们假定大家了解 ​​bash 中的数组​​。

  遍历数组,for 循环通常是最首要的选择。

  如下脚本 prime.sh 中,将会遍历并打印出数组中的所有元素:​

  复制

  1.  #!/bin/bash

  2.  prime=(2 3 5 7 11 13 17 19 23 29)for i in "${prime[@]}"; doecho $idone

  执行一下,结果如下:​

  复制

  1.  $ ./prime.sh2357111317192329

  在循环中使用 break 和 continue

  有时候我们可能希望提前退出循环,或者跳过本次循环。那么此时需要分别使用 break 和 continue。

  break 将会终止循环,并将程序控制转到循环后的下一个命令或指令。

  比如,下面的循环只会打印从 1 到 3:

  复制

  1.  for ((i=1;i<=10;i++)); doecho $iif [ $i -eq 3 ]; thenbreakfidone

  使用 continue 语句会跳过本次循环,继续执行下次循环。比如,下面脚本 odd.sh 只会打印从 1 到 10 之间的奇数,而跳过偶数:

  复制

  1.  #!/bin/bashfor ((i=0;i<=10;i++)); doif [ $(($i % 2)) -ne 1 ]; thencontinuefiecho $idone

  执行结果如下:​

  复制

  1.  $ ./odd.sh13579

  无限循环

  无限循环是一个永远运行的循环,其循环条件始终为真。大多数情况下,无限循环是因为逻辑错误造成的bug。

  例如,有人可能希望创建一个循环,以降序打印数字1到10,结果可能会错误地创建以下无限循环:​

  复制

  1.  for ((i=10;i>0;i++)); doecho $idone

  上述错误是将 i 递增 1。要修复这个问题需要将递增改为递减 i--:​

  复制

  1.  for ((i=10;i>0;i--)); doecho $idone

  在某些情况下,我们可能希望有意创建无限循环,以等待系统满足外部条件。如下所示:​

  复制

  1.  for ((;;)); do[COMMANDS]done

  如果想要创建一个无限 while 循环,可参考如下:​

  复制

  1.  while [ true ]; do [COMMANDS]done1.

  来源: TIAP

  >>>>>>点击进入系统运维专题

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-运维
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯