Loops循环在shell中的使用

本文深入探讨了Shell脚本中的循环结构,包括for循环、while循环和until循环的使用方法及语法,通过具体示例展示了如何在Shell脚本中高效利用循环来处理任务,适用于初学者及有经验的开发者。

ENV:

[root@Fedora31 ~]# uname -r
5.5.15-200.fc31.x86_64
[root@Fedora31 ~]# cat /etc/redhat-release 
Fedora release 31 (Thirty One)

循环的使用非常多,也是很有用的,不管是在编程中,还是在shell中,循环语句的使用可以节省大量的时间和空间。

循环的使用和C语言中的语法相差不大(基本可以说是一样)

这里不做实例操作,只是做为重要内容进行记录

For loop:

        for var in list;
	do 
	command; #use $var
	done
	list can be a string, or a sequence

#the variable i will hold a character in the range a to z:
	for i in {a..z}; do actions; done;

the for loop can also take the format of the for loop in C.
	for((i=o;i<10;i++))
	{
	commands;#use $i
	}

While loop:

	while condition
	do
	commands;
	done
当condition为true时执行

Until loop:

        x=0;
	until [ $x -eq 9 ]; # [ $x -eq 9 ] is the condition
	do let x++; echo $x;
	done

 

 

### Shellfor 循环的正确使用及继续执行流程示例 在 Shell 脚本中,`for` 循环是一种强大的工具,用于重复执行特定代码块。Shell 提供了多种 `for` 循环语法,包括类 C 语言风格的循环和基于列表的循环。以下详细介绍如何正确使用 `for` 循环,并结合 `continue` 关键字实现跳过某些迭代并继续执行流程。 #### 1. 基于列表的 for 循环 基于列表的 `for` 循环Shell 中最常见的形式之一,它遍历一个固定列表中的元素[^2]。 ```bash #!/bin/bash for item in apple banana cherry do if [ "$item" = "banana" ]; then echo "Skipping banana..." continue # 跳过当前迭代 fi echo "Processing $item" done ``` 在此示例中,当变量 `item` 的值为 `banana` 时,`continue` 语句会跳过当前迭代,并继续处理下一个元素[^3]。 #### 2. 类 C 语言风格的 for 循环 类 C 语言风格的 `for` 循环允许更灵活地控制循环条件和增量操作[^1]。 ```bash #!/bin/bash for ((i = 1; i <= 5; i++)) do if [ $((i % 2)) -eq 0 ]; then echo "Skipping even number: $i" continue # 跳过偶数 fi echo "Processing odd number: $i" done ``` 在此示例中,当变量 `i` 是偶数时,`continue` 语句会跳过当前迭代,并继续处理下一个奇数。 #### 3. 嵌套 for 循环中的 continue 使用 在嵌套 `for` 循环中,`continue` 仅影响其所在的内层循环[^3]。 ```bash #!/bin/bash for i in {1..3} do echo "Outer loop: $i" for j in {1..5} do if [ $j -eq 3 ]; then echo "Skipping inner loop value: $j" continue # 跳过内层循环中的某个值 fi echo "Inner loop: $j" done done ``` 在此示例中,当内层循环变量 `j` 的值为 `3` 时,`continue` 语句会跳过当前内层循环迭代,但不会影响外层循环的执行[^3]。 #### 4. 使用 break 和 continue 控制复杂逻辑 `break` 和 `continue` 可以结合使用来控制复杂的循环逻辑。例如,在嵌套循环中,`break` 可以带参数指定跳出几层循环[^3]。 ```bash #!/bin/bash for i in {1..3} do echo "Outer loop: $i" for j in {1..5} do if [ $j -eq 3 ]; then echo "Breaking out of both loops..." break 2 # 跳出两层循环 fi echo "Inner loop: $j" done done ``` 在此示例中,当内层循环变量 `j` 的值为 `3` 时,`break 2` 语句会直接跳出内外两层循环[^3]。 #### 5. 综合示例:结合条件判断和循环控制 以下是一个综合示例,展示如何在 `for` 循环中结合条件判断、`continue` 和 `break` 来实现复杂逻辑[^4]。 ```bash #!/bin/bash for ((i = 1; i <= 10; i++)) do if [ $((i % 3)) -eq 0 ]; then echo "Skipping multiple of 3: $i" continue # 跳过 3 的倍数 fi if [ $i -ge 7 ]; then echo "Stopping loop at $i" break # 在达到 7 时停止循环 fi echo "Processing number: $i" done ``` 此脚本会跳过所有 3 的倍数,并在处理到数字 7 时停止循环。 ### 注意事项 - `continue` 语句只能用于循环体内,用于跳过当前迭代并进入下一次迭代。 - `break` 语句可以带参数指定跳出的循环层数,但在简单循环中通常不带参数。 - 嵌套循环中,`continue` 只影响其所在的内层循环,而不会影响外层循环
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值