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
下一篇 2016-08-12

相关推荐

  • raid5 阵列

    1 fdisk 分区sdb2,sdd1,sde1, 2  新建raid5 [root@localhost ~]# mdadm -C /dev/md5 -a yes  -l 5  -n 3 -x 1 /dev/sdd1 /dev/sde1  /dev/sdf  /dev/sdb2  3   …

    Linux干货 2017-04-25
  • linux 文件权限以及用户策略 讲解

     linux 文件权限以及用户策略 讲解    由于linux系统是一个多用户使用的系统,对于各个用户指定的文件或目录必须存在一套管理系统,以防止多用户对相同文件的混淆使用。于是催生出了linux系统文件的用户权限设置。其存在的意义就是每一个文件或目录对于不同的用户区分读取,写入,执行三种权限,即:r,w,x。下面将详…

    Linux干货 2016-08-05
  • 浅谈技术管理(转载,讲的非常不错,技术和产品都值得一看)

      针对这些年旁观和经历过的技术产品场景,做一些个人的总结和判定,尽量不涉及争议性话题,比如对一个互联网公司而言,技术重要还是产品重要之类的,这种话题一扯开,各有道理,谁也别指望说服谁。     此外,加一个前缀,主要针对非技术领导者所面临的技术管理困境,在很多从传统企业转型或个人站转型的互联网企业里,这个问…

    Linux干货 2015-04-04
  • 网络配置与可视化监控工具

    nmcli  [ OPTIONS ] OBJECT { COMMAND | help } OBJECT := { general | networking | radio | connection | device | agent  }    OPTIONS := {    -t[erse] : 简…

    Linux干货 2016-09-07
  • 高级文件系统管理(swap,RAID,LVM)

    交换分区wasp swap文件系统:     linux上的交换分区必须使用独立的文件系统;         其文件系统的system ID必须为82 创建swap设备,文件系统,使用mkswap命令 创建步骤:   &…

    Linux干货 2016-08-30
  • Linux运维之进程管理

    一、      进程概念 进程是内核的一个功能,在Linux中,运行一个程序或命令可以出发一个事件而驱动一个PID,在linux系统中,系统只识别二进制程序文件,我们可以通过执行系统上的二进制程序来运行程序,进而产生进程。在linux系统中第一个进程是init程序,它是系统开机第一个加载的程序,用来支撑系统的…

    Linux干货 2016-09-13