while
while允许定义要测试的命令
while test command
do
do other commands
done
一个简单例子
#!/bin/bash
var=10
while [ $var -gt 0 ]
do
echo $var
var=$[ $var -1 ]
done
while命令允许多条test命令,只有最后一条测试命令的退出状态是用来决定循环是何时停止的。
#!/bin/bash
var=10
while echo $var
[ $var -ge 0 ]
do
echo "this is inside the loop"
var=$[ $var -1 ]
done
until命令
until需要定义要测试的命令
until test commands
do
do other commands
done
文件数据的循环
通常要迭代存储在文件内部的项。可以使用以下两种:
使用嵌套循环
更改环境变量IFS
通过更改IFS,可以使for命令将文件中每行作为单独的一项来处理,即使数据包内含空格,提取了文件的个别行之后,还需要再循环以提取包含的数据,栗子如下
#!/bin/bash
IFS.OLD=$IFS
IFS=$'\n'
#反引号,又打错了,不容易发现
for entry in `cat /etc/passwd`
do
echo "values in $entry -"
IFS=:
for value in $entry
do
echo "$value"
done
done
控制循环
可以使用break,continue这两个区别就不多说了,这里还可以使用break n;
continue n来进一步控制循环,栗子
#!/bin/bash
for (( a=1; a<4; a++ ))
do
echo "outer loop : $a"
for (( b=1; b<100; b++))
do
if [ $b -gt 4 ]
then
break 2;
fi
echo "inner loop: $b"
done
done
处理循环的输出
可以在shell脚本中使用管道或重定向循环输出结果,栗子如下
#!/bin/bash
for file in /home/david/*
do
if [ -d $file ]
then
echo "$file is a dir"
else
echo "$file is a file"
fi
done >output.txt
同样可以通过管道传送给其他命令
#!/bin/bash
for state in "New York" China America Japan
do
echo "$state"
done | sort