ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

shell的for循环

2026/9/13 3:43:24 拓冰建站 浏览量
shell的for循环

shell 的 for 循环

(1)概述

for 循环是 shell 中常用的循环控制结构,用于重复执行一段代码。for 循环的语法如下:

for variablein list	#每一次循环,依次把列表list 中的一个值赋给循环变量
do					#循环体开始的标志commands		#循环变量每取一次值,循环体就执行一遍commands
done				#循环结束的标志,返回循环顶部

其中:

  • variable 是循环变量,每次循环会从 list 中取出一个值赋给 variable。
  • list 是循环的对象,可以是字符串、文件名、数字序列等。
  • commands 是循环体,循环会重复执行 commands 指定的代码。

(2)列表 for 循环

列表 for 循环是 for 循环最常见的一种形式,list 可以是字符串、文件名、数字序列等。

例1:输出当前目录下的所有文件
#!/bin/bashfor file in *
doecho "$file"
done
例2:读取/etc/passwd文件,获取用户名
#!/bin/bashfor username in `awk -F: '{print $1}' /etc/passwd`
doecho "$username"
done

该脚本的输出结果如下:

root
daemon
bin
sys
sync
...

(3)不带列表的 for 循环

不带列表的 for 循环是指循环变量 variable 的值由命令行参数指定。

例1:输出命令行参数
#!/bin/bashfor arg
doecho "$arg"
done
例2:监控主机存活

可以ping整个网段,并返回格式为时间、IP地址和在线情况(down或up):

#!/bin/bash  for ip in 192.168.31.{1..255}
doping -c2 "$ip" &>/dev/nullif [ $? -eq 0 ]; thenecho -e " $(date +%F-%H:%M:%S) $ip \033[032m up \033[0m"  elseecho -e " $(date +%F-%H:%M:%S) $ip \033[031m down \033[0m"  fi
done
sleep 5

输出:

[root@localhost shell]# sh ping.sh  2023-12-02-16:32:03 192.168.31.1  up 2023-12-02-16:32:06 192.168.31.2  down 2023-12-02-16:32:09 192.168.31.3  down 2023-12-02-16:32:12 192.168.31.4  down 2023-12-02-16:32:15 192.168.31.5  down 。。。

(4)break 和 continue

break 和 continue 是 shell 中用于控制 for 循环的两个关键字。

  • break 用于强行退出当前循环。
  • continue 用于忽略本次循环的剩余部分,回到循环的顶部,继续下一次循环。
例1:使用 break 退出循环
#!/bin/bashi=1
for day in Mon Tue Wed Thu Fri
doecho "Weekday $((i++)) : $day"if [ $i -eq 3 ]; thenbreakfi
done
例2:使用 continue 跳过周末
#!/bin/bashi=1
for day in Mon Tue Wed Thu Fri Sat Sun
doecho -n "Day $((i++)) : $day"if [ $i -eq 7 -o $i -eq 8 ]; thenecho "(WEEKEND)"continuefiecho "(weekday)"
done

(5)类C语言for循环

shell 的类 C 语言 for 语法与 C 语言的 for 语法相似,都是用于重复执行一段代码的结构。shell 的类 C 语言 for 语法的语法如下:

for (( variable = start; condition; increment ))
docommands
done

其中:

  • variable 是循环变量,每次循环会从 start 的值开始,根据 condition 的判断进行循环。
  • start 是循环变量的初始值。
  • condition 是循环的条件,如果条件为真,则继续循环,否则退出循环。
  • increment 是循环变量的步进值,每次循环后,循环变量会增加 increment 的值。

演示示例

1. 10秒倒计时

#!/bin/bashecho "10秒倒计时:"
echofor (( i=10; i>0; i-- ))
doecho $isleep 1
done

该脚本输出:

10秒倒计时:10
9
8
7
6
5
4
3
2
1
  • for 循环也可以嵌套使用,即在 for 循环中嵌套另一个 for 循环。
  • for 循环还可以使用 range 函数,range 函数可以生成一个数字序列。

shell 的类 C 语言 for 语法可以简化 for 循环的语法,使其更加接近 C 语言的语法。在实际使用中,可以根据实际情况选择合适的语法。