美文网首页Shell
Shell Script(四):条件分支语句 1

Shell Script(四):条件分支语句 1

作者: 蓝天白云bubble | 来源:发表于2018-12-23 21:54 被阅读32次

    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

           这篇文章中主要讲解三个命令:if、test、exit 。
           一、if 命令介绍
           if 命令根据其后面命令的退出状态来做出相应的决定。其语法格式如下:

    if commands; then
    commands
    [elif commands; then
    commands...]
    [else
    commands]
    fi
    

           咋一看上去有点不理解,这不用担心,后面会有实例演示。
           先说一下命令的退出状态,每个命令在执行后都会有一个相应的退出状态,用 0 ~ 255 中的某个数字来表示,0 表示该命令执行成功,其他数字表示命令执行失败。接下来通过一个实例来感受一下:

    jason@jason-Lenovo-Y50-70:~$ ls -d /usr/bin
    /usr/bin
    jason@jason-Lenovo-Y50-70:~$ echo $?
    0
    jason@jason-Lenovo-Y50-70:~$ ls -d /bin/usr
    ls: cannot access /bin/usr: No such file or directory
    jason@jason-Lenovo-Y50-70:~$ echo $?
    2
    

           在这个实例中可以看到,命令 “ls -d /usr/bin” 成功执行,然后通过 “echo $?” 来查看命令 “ls -d /usr/bin” 的退出状态,由于该命令成功执行,所以这里得到的退出状态是 0 。而对于命令 “ls -d /bin/usr” ,由于该命令执行失败,所以得到的退出状态不是 0 。
           另外需要说一下,在 Shell 中有两个很简单的命令: true 和 false 。true 命令对应的退出状态是 0 ,false命令对应的退出状态是 1 。演示如下:

    jason@jason-Lenovo-Y50-70:~$ true
    jason@jason-Lenovo-Y50-70:~$ echo $?
    0
    jason@jason-Lenovo-Y50-70:~$ false
    jason@jason-Lenovo-Y50-70:~$ echo $?
    1
    jason@jason-Lenovo-Y50-70:~$ if true; then echo "It's true."; fi
    It's true.
    jason@jason-Lenovo-Y50-70:~$ if false; then echo "It's true."; fi
    jason@jason-Lenovo-Y50-70:~$
    

           只有当 if 后面命令的退出状态是 0 的时候,then 后面的命令才会被执行。

           二、test 命令介绍
           test 命令一般和 if 命令配合使用,test 命令用来得到一个表达式结果是真还是假,如果 test 后面的表达式为真,则 test 命令的退出状态是 0 ,否则是 1 。test 命令有两种形式的写法,如下:

    # First form
    test expression
    
    # Second form
    [ expression ]
    

           第二种形式的写法虽然没有明确写出 test 这个关键字,但它确实就是 test 命令的一种形式 。在第二种形式的写法中还需要注意的一点:方括号和其内部的表达式之间的空格不能省略。

    错误写法:
    [expression]
    
    正确写法:
    [ expression ]
    

           说到了 test 命令,这里必须要提一下 test 后面常用的一些表达式,这些表达式可以通过在命令行中执行 help test 命令来获取,其使用方式很简单。下面来看一个使用 test 的实例:

    # Alternate form
    
    if [ -f .bash_profile ]
    then
        echo "You have a .bash_profile. Things are fine."
    else
        echo "Yikes! You have no .bash_profile!"
    fi
    
    # Another alternate form
    
    if [ -f .bash_profile ]
    then echo "You have a .bash_profile. Things are fine."
    else echo "Yikes! You have no .bash_profile!"
    fi
    

           “-f .bash_profile” 表达式的意思是说如果当前目录下有 .bash_profile 文件,则该表达式的结果是真,否则为假。另外,通过执行 help test 命令也可以看到 -f FILE 表达式的作用,现将 -f FILE 表达式在 help test 结果中的介绍粘贴在下面:

    -f FILE        True if file exists and is a regular file.
    

           三、exit 命令
           在 Shell 脚本中,exit 命令总能够让脚本在执行到这里时立即退出,同时产生一个跟在 exit 后面的退出状态码,如:“exit 0” 或 “exit 2” 等。

    相关文档

    http://linuxcommand.org/lc3_wss0080.php

    上一篇:Shell Script(三):变量、常量和捕获命令结果

    相关文章

      网友评论

        本文标题:Shell Script(四):条件分支语句 1

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