在Shell编程中,`for`循环有两种主要语法结构:
带列表的for循环
```bash
for item in (list) do
command
done
```
`list` 是一个由空格分隔的字符串,或者是一个命令的输出。
`item` 是每次循环中从列表中取出的元素。
`command` 是每次循环中要执行的命令。
示例:
```bash
示例1:遍历一个字符串列表
names="小明 小王 小张"
for item in $names; do
echo "$item"
done
示例2:计算1到100的和
sum=0
for item in {1..100}; do
let "sum+=item"
done
echo "总数为:${sum}"
示例3:遍历当前目录下的所有文件
for item in $(ls); do
ls -l $item
done
```
不带列表的for循环
```bash
for list do
command
done
```
`list` 是一个命令的输出,该命令会产生一个列表。
`command` 是每次循环中要执行的命令。
示例:
```bash
示例1:遍历一个数字序列
for i in {1..5}; do
echo "The value is: $i"
done
示例2:遍历一个字符串
for str in 'This is a string'; do
echo $str
done
```
C式for循环
Shell还支持C式for循环,其语法如下:
```bash
for ((expr1; expr2; expr3)); do
command
done
```
`expr1` 是初始表达式,在循环开始前求值一次。
`expr2` 是条件表达式,在每次循环迭代前求值。如果结果为真(非零),则执行循环体;如果为假(零),则退出循环。
`expr3` 是迭代表达式,在每次循环迭代后求值。
示例:
```bash
示例1:计算1到100的和
sum=0
for ((i=1; i<=100; i++)); do
let "sum+=i"
done
echo "总数为:${sum}"
```
注意事项
在使用`for`循环时,如果`in`后面没有指定列表,则`for`循环会遍历所有位置参数。
使用双括号`(( ))`可以进行更复杂的算术运算和循环控制。
在循环体内,可以使用大括号`{}`来明确变量作用域。
通过以上示例和说明,你应该能够更好地理解和使用Shell中的`for`循环。