bash-条件测试

                 条件测试

1.条件测试 

         判断某需求是否满足,需要由测试机制来实现;

        专用的测试表达式需要由测试命令辅助完成测试过程;

             评估布尔声明,以便用在条件性执行中

            • 若真,则返回0

            • 若假,则返回1

2.测试命令:

        • test EXPRESSION

        • [ EXPRESSION ]

        • [[ EXPRESSION ]]

        注意: EXPRESSION前后必须有空白字符

3.条件性的执行操作符

         根据退出状态而定,命令可以有条件地运行

            • && 代表条件性的 AND THEN

            • || 代表条件性的 OR ELSE

         例如:

        $ grep -q no_such_user /etc/passwd || echo 'No such user' No such user

        $ ping -c1 -W2 station1 &> /dev/null && echo "station1 is up" \

             > || (echo 'station1 is unreachable'; exit 1)

            station1 is up

    若ping -c1 -W2 station1执行成功,则echo "station1 is up",否则echo 'station1 is unreachable'; exit 


4.test命令

         长格式的例子:

            $ test "$A" == "$B" && echo "Strings are equal"

            $ test “$A” -eq “$B”&& echo "Integers are equal"

         简写格式的例子:

            $ [ "$A" == "$B" ] && echo "Strings are equal"

            $ [ "$A" -eq "$B" ] && echo "Integers are equal"

5.bash的测试类型

         数值测试:(注意前面有“-”)

            gt: 是否大于;             greater than

            -ge: 是否大于等于;      greater equal

            -eq: 是否等于; equal

            -ne: 是否不等于; not equal

            -lt: 是否小于; less than

            -le: 是否小于等于; less equal

            eg:   [ "$A" -eq "$B" ]

         字符串测试:

            ==:是否等于;

            >: ascii码是否大于ascii码

            <: 是否小于

            !=: 是否不等于

            =~: 左侧字符串是否能够被右侧的PATTERN所匹配

            注意: 此表达式一般用于[[ ]]中;

            -z "STRING":字符串是否为空,空为真,不空为假

            -n "STRING":字符串是否不空,不空为真,空为假

            注意:用于字符串比较时的用到的操作数都应该使用引号

        文件测试

             存在性测试

                -a FILE:同-e

                -e FILE: 文件存在性测试,存在为真,否则为假;

             存在性及类别测试

                -b FILE:是否存在且为块设备文件;

                -c FILE:是否存在且为字符设备文件;

                -d FILE:是否存在且为目录文件;

                -f FILE:是否存在且为普通文件;

                -h FILE 或 -L FILE:存在且为符号链接文件;

                -p FILE:是否存在且为命名管道文件;

                -S FILE:是否存在且为套接字文件;

             文件权限测试:

                -r FILE:是否存在且可读

                -w FILE: 是否存在且可写

                -x FILE: 是否存在且可执行

             文件特殊权限测试:

                -g FILE:是否存在且拥有sgid权限;

                -u FILE:是否存在且拥有suid权限;

                -k FILE:是否存在且拥有sticky权限;

             文件大小测试:

                -s FILE: 是否存在且非空;

             文件是否打开:

                -t fd: fd表示文件描述符是否已经打开且与某终端相关

                -N FILE:文件自动上一次被读取之后是否被修改过

                -O FILE:当前有效用户是否为文件属主

                -G FILE:当前有效用户是否为文件属组

6.双目测试:

        FILE1 -ef FILE2: FILE1与FILE2是否指向同一个设备上的相同inode

        FILE1 -nt FILE2: FILE1是否新于FILE2;

        FILE1 -ot FILE2: FILE1是否旧于FILE2;

7.组合测试条件

         第一种方式:

            COMMAND1 && COMMAND2 并且

            COMMAND1 || COMMAND2 或者

            ! COMMAND 非

            如: [ -e FILE ] && [ -r FILE ]

         第二种方式:

            EXPRESSION1 -a EXPRESSION2 并且

            EXPRESSION1 -o EXPRESSION2 或者

            ! EXPRESSION  非

            (使用单括号)

        必须使用测试命令进行

        [ -z “$HOSTNAME” -o  ”$HOSTNAME " == "localhost.localdomain" ] && hostname www.magedu.com

         [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

        

原创文章,作者:ldt195175108,如若转载,请注明出处:http://www.178linux.com/33706

(0)
ldt195175108ldt195175108
上一篇 2016-08-12 09:01
下一篇 2016-08-12 09:01

相关推荐

  • shell脚本语言的for循环使用方法和案例

    在shell语言中bash是用的最多的,其语法简单。以指令为核心快速解决常用的问题。所有语言中逻辑控制是必不可少的,它可以帮助我们减少不必要的重复性工作。今天我们就来说说所有语言都会使用的神奇的for循环,学了它以后不仅知道如果规避重复的工作,还能理解程序的运行原理。         for循环是什么?&nb…

    Linux干货 2017-04-16
  • 文件、目录2——Linux基本命令(8)

    1.复制文件和目录 cp  SRC  DEST 源 目的地 规则: 如果目标目录下还有一个目录与源文件同名,则无法复制:            -i 覆盖前提示        &n…

    2017-07-18
  • 优云automation实践技巧:简单4步完成自动化构建发布

    前言:本文介绍了优云是如何将运维自动化产品应用到日常工作实践中,并通过内部用户的大量使用来不断改进产品的用户体验。 各位看官,这不是一个揭发单身有为青年因同事们天天秀恩爱而受到一万点暴击伤害的故事。这里指的狗粮,不是真正的“狗粮”——当然,也不是你们认为的狗粮。 事实上,现在很多涉足产品开发的互联网公司,都会提到“吃狗粮”这一概念(出自“Eating you…

    系统运维 2017-01-09
  • LINUX下用户管理命令简述

    LINUX下用户管理命令简述 添加用户并设置密码 useradd [用户名] 创建用户 [root@localhost ~]# useradd jack [root@localhost ~]# cat /etc/shadow | grep jack jack:!!:17257:0:99999:7::: passwd [用户名] 设置密码 [root@loca…

    Linux干货 2017-04-05
  • Python基础篇之过程型程序设计

    一、Python过程型程序设计 面向过程 以指令为中心,由指令处理数据 如何组织代码解码问题 面向对象 以数据为中心,所有的处理代码都围绕数据展开 如何设计数据结构组织数据,并提供对此类数据所允许处理操作 简单方法: 1)、编译安装新版本至某特定路径 # yum install readline-devel # tar xf Python-2.7.6.tar…

    2018-01-11
  • 自定义命令别名及引用结果

    自定义命令别名及引用结果 alias alias命令用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。 语法 alias(选项)(参数) 选项 -p:打印已经设置的命令别名。 参数 命令别名设置:定义命令别名,格式为“命令别名=‘实际命令’” 实例 显示已设置的别名 [root@localhost ~]# alias alias cp=’c…

    Linux干货 2018-03-11