基本格式
for [变量] in [取值列表]
do
[各种操作]
done
或者使用分号 ;
分割语句:
for [变量] in [取值列表]; do [各种操作]; done
取值列表大致可以分成枚举和迭代两类
枚举
取值列表为空格或回车符分割的字符串
for i in 'apple' 'meat' 'sleep' 'woman'
do
echo I like $i
done
迭代
花括号 { }
• 数字迭代,比如 {1..100}
• ASCII字符迭代,比如 {a..A}
来计算一下1加到100的和
ans=0
for i in {1..100}
do
let ans+=$i
done
echo $ans
结果是5050.
花括号的迭代还可以指定指定增量,格式如下:
{start..end..sep}
打印1到100以内的所有奇数:
for i in {1..100..2}; do echo $i; done
使用 seq
需要配合命令替换使用。seq
命令的格式为:
seq 首数 [增量] 末数
例子
用脚本来ping一下局域网内的主机:
#!/bin/bash
PREFIX=192.168.1.
for i in `seq 100 110`
do
echo -n "${PREFIX}$i "
ping -c5 ${PREFIX}${i} >/dev/null 2>&1
if [ "$?" -eq 0 ];then
echo "OK"
else
echo "Failed"
fi
done
当然了for循环也可以写作 for i in {100..110}
终端运行的结果
jerry@X:~$ bash ping.sh
192.168.1.100 Failed
192.168.1.101 Failed
192.168.1.102 OK
192.168.1.103 OK
192.168.1.104 OK
192.168.1.105 OK
192.168.1.106 Failed
192.168.1.107 Failed
192.168.1.108 Failed
192.168.1.109 Failed
192.168.1.110 Failed
C 风格 for 循环
Bash 还支持 C 语言风格的 for 循环,这个很好理解,我们直接来看例子,去计算一下 1 到 100 的和。
ans=0
# 注意,这里的 for 循环要有两层括号。
for ((i=1;i<=100;i++))
do
let ans+=$i
done
echo $ans