4.12 循环语句
for…in…do…done
形式
命令格式:
for var in val1 val2 val3
do
语句1
语句2
...
done
示例1,输出a 2 cc,每个元素一行:
for i in a 2 cc
do
echo $i
done
示例2,输出当前路径下的所有文件名,每个文件名一行:
for file in `ls`
do
echo $file
done
示例3,输出1-10
for i in $(seq 1 10)
do
echo $i
done
示例4,使用{1..10} 或者 {a..z}
for i in {a..z}
do
echo $i
done
for ((…;…;…)) do…done
形式
命令格式:
for ((expression; condition; expression))
do
语句1
语句2
done
示例,输出1-10,每个数占一行:
for ((i=1; i<=10; i++))
do
echo $i
done
while…do…done
循环
命令格式:
while condition
do
语句1
语句2
...
done
示例,文件结束符为Ctrl+d,输入文件结束符后read指令返回false。
while read name
do
echo $name
done
until…do…done
循环
当条件为真时结束。
命令格式:
until condition
do
语句1
语句2
...
done
示例,当用户输入yes或者YES时结束,否则一直等待读入。
until [ "${word}" == "yes" ] || [ "${word}" == "YES" ]
do
read -p "Please input yes/YES to stop this program: " word
done
break
命令
跳出当前一层循环,注意与C/C++
不同的是:break
不能跳出case
语句。
示例
while read name
do
for ((i=1;i<=10;i++))
do
case $i in
8)
break
;;
*)
echo $i
;;
esac
done
done
该示例每读入非EOF的字符串,会输出一遍1-7。
该程序可以输入Ctrl+d
文件结束符来结束,也可以直接用Ctrl+c
杀掉该进程。
continue
命令
跳出当前循环。
示例:
for ((i=1;i<=10;i++))
do
if [ `expr $i % 2` -eq 0 ]
then
continue
fi
echo $i
done
该程序输出1-10中的所有奇数。
死循环的处理方式
如果Terminal
可以打开该程序,则输入Ctrl+c
即可。
否则可以直接关闭进程:
- 使用
top
命令找到进程的PID - 输入
kill -9 PID
即可关掉此进程