Linux Shell——迭代循环
2017-04-28 本文已影响169人
码匠安徒生
学习是自己的事情。
scripts are for lazy people.

循环语句是任何一门语言都不能缺失的部分。shell 里也是一样,只是语法不太一样。如果学过其他的编程语言,就很容易掌握。
1. for 循环
for 循环的语法疾结构为:
for f in * ; do
statement "$f"
done
这里的 f 就是迭代的元素,* 可以是一个数组或是 list,也可以是命令管道。
还有另外一种写法:
for f in *
do
statement "$f"
done
可以根据自己的喜好选择一种写法。
新建一个脚本文件,打印出所有输入的参数:
#!/bin/bash
echo "You are using $(basename $0)"
for n in $*
do
echo "Hello $n"
done
exit 0
运行结果如下:

在循环中,可以使用continue
和break
关键字,具体用法与其他语言里是一样的。continue
表示在循环体内,跳过当前循环,执行下次的循环;而break
表示退出整个循环,后面的循环和代码不再执行。
看具体看例子。
$ for f in * ; do
[ -d "$f" ] || continue
chmod 3777 "$f"
done
如果是目录,添加权限;如果不是,跳过当前循环,continue 后面代码不再执行,而是直接执行下次循环。
$ for f in * ; do
[ -d "$f" ] && break
done
echo "We have found a directory $f"
上面的脚本,在循环中一旦发现目录,则立即停止循环并退出。
2. while 循环
while 循环可以说是 for 循环的一个变体,只要特定条件为真,while
语句就会执行。具体看例子,
COUNT=10
while (( COUNT >= 0 )) ; do
echo -e "$COUNT \c"
(( COUNT-- ))
done ;
echo
3. until 循环
until
循环与while
语句的功能正好相反:只要特定条件为假,它就重复。下面是一个与前面的 while
循环具有同等功能的 until
循环。
COUNT=10
until (( COUNT < 0 )) ; do
echo -e "$COUNT \c"
(( COUNT-- ))
done ;
echo
实例联系
现在,我们做一个用户选择界面,这样,根据提示输入不同的参数来执行不同的功能,这里我们需要用到while
循环,和前面讲过的case
条件选择。
#!/bin/bash
while true ; do
clear
echo "Choose an item: a, b or c"
echo "a: Backup"
echo "b: Display Calendar"
echo "c: Exit"
read -sn1
case "$REPLY" in
a) tar -czvf $HOME/backup.tgz ${HOME}/JavaSource;;
b) cal;;
c) exit 0;;
esac
read -n1 -p "Press andy key to continue"
done
根据提示,如果输入 a 的话,则把 home 目录下的 JavaSource 目录压缩打包。
输入b,显示当前月份。
输入c,程序退出。