美文网首页Shellbash
Bash编程004——条件语句2

Bash编程004——条件语句2

作者: 若梦儿 | 来源:发表于2018-12-26 18:09 被阅读2次

    Bash编程004——条件语句2

    [[ ]]的使用

    [[ ]]是bash中的关键字,相当于new test,也是用于计算表达式的值,但是具有更加强大的功能。

    简单来说,test([ ])实现了老的可移植的语法特性。几乎所有的shell总都支持它,而[[ ]]是一个新的关键字(不是builtin)。在shell中[ ]和[[ ]]基本功能有很多相似之处,不同在于[[ ]]提供了更多方便使用的特性。

    比如字符串比较,在[ ]中 < 和 >会被解释为重定向输入输出,要想使用比较的功能需要使用\转义,而在[[ ]]可以直接使用。

    [[ ]]中可以直接使用&&(条件与)和||(条件或)连接多个条件表达式。

    注:这里的&&和||也是类似于C语言中的短路求值,当第一个表达式可以确定最终的值得时候,就不会计算第二个表达式的值。

    示例:

    [[ 2 > 1 && 3 > 2 ]]; echo $?
    # 输出为:0
    [[ 2 > 1 && 3 > 4 ]] ; echo $?
    # 输出为:1
    [[ 2 > 1 || 3 > 4 ]] ; echo $?
    # 输出为:0
    

    另一个微妙的区别在于[[ ]]内不存在单词分割或者通配符展开,这样在对某些变量进行判断时就不需要用引号引用了。

    举例:

    touch hello\ world.txt
    var=hello\ world.txt
    [ $var = "hello" ]; echo $?
    #输出结果:bash: [: 参数太多 2
    [ "$var" = "hello world.txt" ]; echo $?
    #输出结果:1
    [[ "$var" = "hello world.txt" ]]; echo $?
    #输出结果:1
    
    

    if条件语句

    bash中的if条件语句和一般的编程语言没有太大区别,基本语法如下:

    if 命令; then 命令; [ elif 命令; then 命令; ]... [ else 命令; ] fi
    

    首先执行if中的命令,如果退出状态为0,则这行then后的命令,然后终止;否则依次执行elif后的命令(elif 执行完后还未终止,则执行else后的命令),直到退出状态为0,终止命令。

    示例:

    var="hello"
    if [[ $var = "hell" ]];
    then
        echo "var is hell";
    elif [[ $var = "world" ]]
    then
        echo "var is world";
    elif [[ $var = "hello" ]]
    then
        echo "var is hello";
    else
        echo "var is ";
    fi
    # 输出结果为:var is hello
    

    多条件判断语句case

    case语句专门用于处理多分支结构的情况。case采取了模式匹配处理不同的情况。

    语法如下:

    case exp in 
    case) 
    commands ;; 
    case) 
    commands ;; 
    ... 
    case) 
    commands ;; 
    *)
    commands ;;
    esac
    

    示例:

    num=100ab
    case $num in
    [1-9]ab*)
    echo "case 1";;
    [1-9][1-9]ab*)
    echo "case 2";;
    [1-9][0-9][0-9]ab*)
    echo "case 3";;
    *)
    echo "case *";;
    esac
    # 输出结果:case 3
    

    其中方括号代表匹配其中的任一字符,连接字符表示的是两个字符之间的所有字符(包含左右端点),*代表匹配任意长度的字符串。所以,最后的*)语句代表处理剩余的所有情况,类似于C语言中的default。

    相关文章

      网友评论

        本文标题:Bash编程004——条件语句2

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