51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1792|回复: 0
打印 上一主题 下一主题

1.10 test命令

[复制链接]

 成长值: 14041

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74102
    跳转到指定楼层
    楼主
    发表于 2017-12-18 22:34:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        到目前为止,在if语句中看到的都是普通shell命令。你可能想问, if-then语句是否能测试命令退出状态码之外的条件。
       答案是不能。但在bash shell中有个好用的工具可以帮你通过if-then语句测试其他条件。
       test命令提供了在if-then语句中测试不同条件的途径。如果test命令中列出的条件成立,test命令就会退出并返回退出状态码0。这样if-then语句就与其他编程语言中的if-then语句以类似的方式工作了。如果条件不成立, test命令就会退出并返回非零的退出状态码,这使得if-then语句不会再被执行。
       test命令的格式非常简单。
        test condition
       condition是test命令要测试的一系列参数和值。当用在if-then语句中时, test命令看起来是这样的。
    1. if test condition
    2. then
    3. commands
    4. fi
    复制代码
    如果不写test命令的condition部分,它会以非零的退出状态码(状态码0代表命令执行成功,非0代表不成功)退出, 并执行else语句块。
        bash shell提供了另一种条件测试方法,无需在if-then语句中声明test命令。
    1. if [ condition ]
    2. then
    3. commands
    4. fi
    复制代码
        方括号定义了测试条件。注意,第一个方括号之后和第二个方括号之前必须加上一个空格,否则就会报错。
         test命令可以判断三类条件:
     数值比较
     字符串比较
     文件比较  

    ******注意注意主意:在test比较重不能直接用>,这会被解释为重定向命令。例如,要判断两个数的大小,要用以下格式:
    比 较                                描 述
    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  
       如果要使用>号,则必须转义。用\>的形式。

       这里强调下用的比较多的test文件比较。因为文件比较是shell编程中最为强大、也是用得最多的比较形式。
       下表为test命令的文件比较功能:

        这些测试条件使你能够在shell脚本中检查文件系统中的文件。它们经常出现在需要进行文件访问的脚本中。鉴于其使用广泛,我们来逐个看看。
    1)检查目录
       -d测试会检查指定的目录是否存在于系统中。如果你打算将文件写入目录或是准备切换到某个目录中,先进行测试总是件好事情。
        代码:
    1. jump_directory=/home/root
    2. if [ -d $jump_directory ]
    3. then
    4. echo "The $jump_directory directory exists"
    5. cd $jump_directory
    6. ls
    7. else
    8. echo "The $jump_directory directory does not exist"
    9. fi
    复制代码
    输出:
    1. [root@python3 shellprogram]# ./test2
    2. The /home/root directory does not exist
    复制代码

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2024-5-14 18:53 , Processed in 0.169757 second(s), 32 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表