Linux Shell——迭代循环

学习是自己的事情。

scripts are for lazy people.

Linux Shell——迭代循环_第1张图片
Linux Shell

循环语句是任何一门语言都不能缺失的部分。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

运行结果如下:

Linux Shell——迭代循环_第2张图片
for loop

在循环中,可以使用continuebreak关键字,具体用法与其他语言里是一样的。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,程序退出。

你可能感兴趣的:(Linux Shell——迭代循环)