for 循环是 shell 中常用的循环控制结构,用于重复执行一段代码。for 循环的语法如下:
for variablein list #每一次循环,依次把列表list 中的一个值赋给循环变量
do #循环体开始的标志
commands #循环变量每取一次值,循环体就执行一遍commands
done #循环结束的标志,返回循环顶部
其中:
列表 for 循环是 for 循环最常见的一种形式,list 可以是字符串、文件名、数字序列等。
#!/bin/bash
for file in *
do
echo "$file"
done
#!/bin/bash
for username in `awk -F: '{print $1}' /etc/passwd`
do
echo "$username"
done
该脚本的输出结果如下:
root
daemon
bin
sys
sync
...
不带列表的 for 循环是指循环变量 variable 的值由命令行参数指定。
#!/bin/bash
for arg
do
echo "$arg"
done
可以ping整个网段,并返回格式为时间、IP地址和在线情况(down或up):
#!/bin/bash
for ip in 192.168.31.{1..255}
do
ping -c2 "$ip" &>/dev/null
if [ $? -eq 0 ]; then
echo -e " $(date +%F-%H:%M:%S) $ip \033[032m up \033[0m"
else
echo -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
。。。
break 和 continue 是 shell 中用于控制 for 循环的两个关键字。
#!/bin/bash
i=1
for day in Mon Tue Wed Thu Fri
do
echo "Weekday $((i++)) : $day"
if [ $i -eq 3 ]; then
break
fi
done
#!/bin/bash
i=1
for day in Mon Tue Wed Thu Fri Sat Sun
do
echo -n "Day $((i++)) : $day"
if [ $i -eq 7 -o $i -eq 8 ]; then
echo "(WEEKEND)"
continue
fi
echo "(weekday)"
done
shell 的类 C 语言 for 语法与 C 语言的 for 语法相似,都是用于重复执行一段代码的结构。shell 的类 C 语言 for 语法的语法如下:
for (( variable = start; condition; increment ))
do
commands
done
其中:
1. 10秒倒计时
#!/bin/bash
echo "10秒倒计时:"
echo
for (( i=10; i>0; i-- ))
do
echo $i
sleep 1
done
该脚本输出:
10秒倒计时:
10
9
8
7
6
5
4
3
2
1
shell 的类 C 语言 for 语法可以简化 for 循环的语法,使其更加接近 C 语言的语法。在实际使用中,可以根据实际情况选择合适的语法。