Linux Shell——迭代循环

作者: 码匠安徒生 | 来源:发表于2017-04-28 17:10 被阅读169次

    学习是自己的事情。

    scripts are for lazy people.

    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
    

    运行结果如下:

    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——迭代循环

        本文链接:https://www.haomeiwen.com/subject/bgnozttx.html