Shell循环语句:for循环、跳出循环等



循环与遍历

循环(Loop)和遍历(Traversal)是两个在计算机编程中经常使用的概念。

循环

循环(Loop)是计算机编程中非常重要的一种结构,其主要目的是为了简化代码编写,提高代码的重复利用率,以及提高程序的效率。

循环是一种重复执行一段代码的结构。通过循环,可以在满足一定条件的情况下,多次执行相同的代码。

结构

循环语句通常包括一个循环体(Loop Body)和一个循环条件(Loop Condition),当循环条件满足时,循环体会被执行,否则循环结束。

循环的优势

重复执行代码:通过使用循环,可以在程序中重复执行一段代码,从而避免代码的重复编写,减少程序代码量,提高程序的可读性和可维护性。

简化程序逻辑:使用循环可以使程序逻辑更加简洁明了,提高程序的可读性和可理解性,降低代码出错的可能性。

提高代码的重复利用率:通过将重复的代码封装在循环结构中,可以提高代码的重复利用率,减少代码冗余。

提高程序的效率:循环可以让程序自动化地执行重复任务,从而减少人工干预的次数,提高程序的效率和性能。

遍历

遍历(Traversal)是指对一组数据结构中的每个元素进行一次访问的过程。
在计算机编程中,常常需要对数组、列表、树等数据结构中的每个元素进行遍历,以便对它们进行操作或者输出。

关系

循环是一种控制流程的结构,用于重复执行一段代码,而遍历是一种数据操作的过程,用于访问并处理数据结构中的每个元素。

在某些情况下,循环和遍历可以结合使用,以便在循环中遍历数据结构并对其进行操作。

for 循环

格式1:基本格式

  • 语法

    for 变量名 [in 名称范围] # (可以不写)
    do
      执行内容
    done                   # 结束标志
    
  • 示例

    for i in $(cat /opt/users.txt)
    do
      useradd $i
      echo 123456 | passwd --stdin $i
    done
    
  • 示例,创建循环脚本

    #!/bin/bash
    for i in {1..5}  # 从1到5循环
    do
      echo "$i"      # 输出当前的i值
    done
    输出
    1
    2
    3
    4
    5
    

格式2:类似 C 语言的格式

  • 语法

    for (( 表达式1;表达式2;表达式3 ))
    do
      执行内容
    done
    
  • 表达式说明

    • 表达式1:定义变量并赋初值
    • 表达式2:循环条件
    • 表达式3:每次循环后的操作
  • 示例

    #!/bin/bash
    for ((i=0;i<=5;i++))
    do
      echo "$i"
    done
    输出:
    0
    1
    2
    3
    4
    5
    

生成序列-seq

seq 用于生成一个序列(sequence)并打印出来。

  • 示例

    seq 10          # 生成1到10的序列
    seq 10 -2 1     # 从10到1,每次减2
    seq 2 2 10      # 从2到10,每次加2
    
    a=$(seq 1 10)   # 生成后赋值
    
    seq 20 -1 1     # 反向生成序列
    
  • 脚本示例

    a=$(seq 1 10)
    echo -n $a
    1 2 3 4 5 6 7 8 9 10
    
    a=$(seq 20 -1 1) #反向生成
    echo $a
    20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
    
    a=$(seq 20 -2 1)
    echo $a
    20 18 16 14 12 10 8 6 4 
    

跳出循环continue和break

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell 使用两个命令来实现该功能:breakcontinue

continue 跳出当前循环

用于跳过当前循环中的剩余代码,直接进入下一次循环迭代。它不会终止整个循环,只是跳过本次循环的剩余部分,继续执行下一次循环。仅仅跳出当前循环。

格式: continue [数字]

使用场景

  • 当需要在某些特定条件下跳过循环中的某些操作,而不是终止整个循环时,可以使用 continue
  • 在嵌套循环中,可以使用 continue [N],其中 N 指定跳过第几层循环,1 表示当前循环,2 表示外层循环,依此类推。

示例

#!/bin/bash
for i in {1..5}
do
  if [ $i -eq 3 ]
  then
    continue  # 跳过当前循环,但继续下一次循环
  fi
  echo "$i"
done

输出结果:

1
2
4
5

break 结束循环

用于立即终止当前循环的执行,并跳出循环体。循环之后的代码将继续执行。break 通常用于当满足某个条件时,不再需要继续执行循环的情况。

跳出所有循环(终止执行后面的所有循环)。

格式: break [数字]

使用场景

  • 在遍历一个列表或数组时,当找到所需的元素后,可以使用 break 来结束循环,避免不必要的迭代。
  • 在嵌套循环中,可以使用 break [N],其中 N 指定要跳出的循环层数。1 表示跳出当前循环,2 表示跳出外层循环,依此类推。

示例

#!/bin/bash
for j in {1..3}
do
  for i in {1..5}
  do
    if [ $i -eq 3 ]
    then
      break  # 结束当前循环
    fi
    echo "$i"
  done
done

输出结果:

1
2
1
2
1
2

exit 退出脚本

用于立即终止当前脚本的执行,并返回一个状态码给调用者。状态码通常为 0 表示成功,非 0 表示失败或错误。

使用场景

  • 当需要在某些条件下立即停止脚本的执行时,可以使用 exit
  • 在脚本的调试或错误处理部分,经常使用 exit 来防止错误继续扩散。

break和continue的区别

  • break:在循环内部,当执行到 break 命令时,会立即跳出当前的循环,停止循环执行,然后继续执行下一条指令。
    可以使用 break 命令来提前终止循环,例如当达到特定条件时或者已经执行了足够的次数。
  • continue:在循环内部,当执行到 continue 命令时,会跳过本次循环剩余的代码,并继续下一次循环。
    可以使用 continue 命令来跳过循环中的某些操作,例如在特定条件下跳过一次循环,或者只执行符合条件的循环。
  • 在嵌套循环中,可以在 break 和 continue 命令后面指定数字参数,来指定跳出或跳过多层循环。
    例如,break 2 会跳出当前循环和外层循环的迭代,而continue 2会跳过当前循环和两层外层循环的迭代。

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值