shell脚本编程-结构化命令1-分支语句

1、分支语句

(1)if-then-fi 语句:

        格式:
    if command; then
        commands
    fi    

  当command命令的退出状态码为$?=0时,进入分支,否则继续执行后面的命令。

(2) if-then-else-fi 语句:

        格式:
    if command; then
        commands1
    else
        commands2
    fi  
        当command命令的退出状态码为$?=0时,进入then分支,否则执行else分支命令。

(3)if-then-elif-then-fi 语句:

        格式:
    if command1; then
        commands1
    elif command2; then
        commands2
    fi
        if分支的嵌套处理。

2、test命令

        只能通过test命令测试跟命令退出码无关的条件。
        test命令提供了在if-then语句中测试不同条件的途径。
        test命令可以判断三类条件,数值比较,字符串比较,文件比较
        格式:
    if test condition; then
        commands
    fi
        bash shell中提供了另一种在if-then-fi语句中声明test命令的方法:
    if [ condition ]; then
        commands
    fi
        方括号定义了test命令中用到的条件,注意:左右括号和condition之间必须有一个空格

(1)数值比较

        n1 -eq n2    检查n1是否等于n2 
        n1 -ge n2    检查n1是否大于或等于n2 
        n1 -gt n2     检查n1是否大于n2
        n1 -le n2     检查n1是否小于或等于n2
        n1 -lt n2      检查n1是否小于n2
        n1 -ne n2    检查n1是否不等于n2
    注意:数值比较只能用来处理整数,不能处理浮点数

(2)字符串比较

        str1 = str2        检查str1是否和str2相同
        str1 != str2       检查str1是否和str2不同
        str1 < str2        检查str1是否比str2小
        str1 > str2        检查str1是否比str2大
        -n str                检查str的长度是否非0
        -z str                检查str的长度是否为0
    注意:
            在使用大于和小于号时需要使用转义字符 \< 或 \> ,否则会与重定向符号冲突
            比较时,会将大写字母处理成小写,但是将同样的字符串进行比较时,小写字母较大

(3)文件比较

        -d file        检查file是否存在并且是目录
        -e file        检查file是否存在
        -f file         检查file是否存在并且是文件
        -r file         检查file是否存在并且可读
        -s file         检查file是否存在并且非空
        -w file        检查file是否存在并且可写
        -x file         检查file是否存在并且可执行
        -O file        检查file是否存在并属当前用户所有
        -G file        检查file是否存在并且默认组与当前用户相同
        file1 -nt file2    检查file1是否比file2新
        file1 -ot file2    检查file1是否比file2旧

(4)符合条件测试

        if-then-fi语句允许使用布尔逻辑来组合测试,两种布尔逻辑符号可用:
            [ condition1 ] && [ condition2 ]
            [ condition1 ] || [ condition2 ]

3、if-then 的高级特性

(1)使用双圆括号

        格式:(( expression ))
        expression可以是任意的数学赋值或比比较表达式,除了test命令中的数学运算符之外,还有以下符号:
            val++/val--    后增/后减
            ++val/--val    前加/前减
            !                   逻辑取反
            ~                  按位取反
            **                 幂运算
            << / >>        按位左移/右移
            & / |              按位与/或
            && / ||           逻辑与/或
        注意:双圆括号的数学运算符不需要转义

(2)使用双方括号

        格式:[[ expression ]]
        expression中可以使用test命令中标准的字符串比较,并且提供了模式匹配,可以利用正则表达式进行匹配
        例:
    if [[ $USER == r* ]]; then
        commands
    fi
        匹配 $USER是否是r开头,如果通过,则执行commands内容。

4、case语句

        格式:
    case var in
    val1 | val2)    command1;;
    val3    command2;;
    *)    default command3;;
    esac
        用来解决if-then多层嵌套的问题
 
 
 

你可能感兴趣的:(shell脚本编程-结构化命令1-分支语句)