文章目录
循环与遍历
循环(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 使用两个命令来实现该功能:break 和 continue。
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会跳过当前循环和两层外层循环的迭代。