一、if语句
        语法格式如下:
        if condition
        then
            statements
        else
            statements
        fi
        举例说明如下:
        #!/bin/sh
        if [ $timeofday = "yes" ]; then
            echo "Good moriing"
        else
            echo "Good afternoon"
        fi 
        exit 0

二、elif语句
        有时候测试条件不止一个,就可以用elif,举例说明如下:
        #!/bin/sh
        if [ "$timeofday" = "yes" ]
        then
            echo "Good morning"
        elif [ "$timeofday" = "no" ]; then
            echo "Godd afternoon"
        else
            echo "Sorry, $timeofday not recognized. Enter yes or no"
            exit 1
        fi
        exit 0
        上面之所以在$timeofday上加上双引号是为了防止用户直接敲回车键使得if语句变成下面这副尊容:
        if [ = "yes"]
        从而导致出现如下错误:
        [: =: unary operator expected
        
三、for语句
        语法格式如下:
        for variable in values
        do
            statements
        done
        举例说明如下:
        #!/bin/sh
        for foo in bar fud 43
        do 
            echo $foo
        done
        exit 0
        执行脚本得出如下输出结果:
        bar
        fud
        43
        通常for语句与Shell的文件名扩展一起使用。假设你想打印当前目录中所有以字母f开头以.sh结尾的脚本文件,则可以如下来实现:
        #!/bin/sh
        for file in $(ls f*.sh); do
            lpr $file
        done
        exit 0
        for命令的参数表来自括在$()中的命令的输出结果。

四、while语句
        语法格式如下:
        while condition do
            statements
        done
        举例说明如下:
        #!/bin/sh
        echo "Enter password"
        read trythis
        while [ "$trythis" != "secret" ]; do
            echo "Sorry, try again"
            read trythis
        done
        exit 0
        
五、until语句
        语法格式如下:
        until condition
        do
            statements
        done
        until与while相似,区别在于until循环将反复执行语句statements直到条件condition为真为止。

六、case语句
        语法格式如下:
        case variable in
            pattern [ | pattern] ...) statements;;
            pattern [ | pattern] ...) statements;;
        ...
        esac
        每个模式行都以双引号结尾,因为你可以在前后模式之间放置多条语句,所以需要使用双分号来标记前一个语句的结束和后一个模式的开始。
        举例说明如下:
        #!/bin/sh
        echo "Is it morning?Please answer yes or no"
        read timeofday
        case "$timeofday" in
            [yY] | [yY][eE][Ss] )    echo "Good morning";;
            [nN] * )                     echo "Good afternoon";;
            * )                            echo "Sorry, answer not recoginzed";;
        esac
        exit 0
        上面程序中,最后的*)分支类似于C语言中default,表示缺省分支。
        
、命令列表
1、AND列表
        AND列表结构允许我们按照这样的方式执行一系列命令:只有在前面所有的命令都执行成功的情况下才执行后一条命令,其语法形式如下:
        statement1 && statement2 && statement3 && ...
        &&的作用是检查前一条命令的返回值。
       #!/bin/sh
        touch file_one
        rm -f file_two
        if [ -f file_one ] && echo "hello" && [ -f file_two ] && echo "there"
        then
            echo "in if"
        else
            echo "in else"
        fi
        exit 0
        脚本执行结果如下:
        hello
        in else  
2、OR列表
        OR列表结构允许我们持续执行一系列命令直到有一条命令成功为止,其后命令将不再被执行,其语法形式如下:
        statement1 || statement2 || statement3 || ...
        举例说明如下:
        #!/bin/sh
        rm -f file one
        if [ -f file_one ] || echo "hello" || echo "there"
        then 
            echo "in if"
        else
            echo "in else"
        fi
        exit 0
        脚本执行结果如下:
        hello 
        in if
    
八、语句块
        如果你想在某些只允许使用单个语句的地方(比如:在AND列表或OR列表中)使用多条语句,你可以把它们括在花括号{}中来构造一个语句,举例说明如下:
        get_confirm && {
            grep -v "$cdcatnum" $tracks_file > $temp_file
            cat $temp_file > &tracks_file
            echo 
            add_record_tracks
        }



09-28 08:57