您的位置:首页 > 运维架构 > Shell

Shell 基本运算符+条件测试

2018-03-01 20:48 295 查看
1、运算符

算数运算符:加+ 、减— 、乘 、除/ 、取余% 、赋值= 、 等于== 、不等于!

关系运算符:大于等于-ge、大于-gt、小于等于-le、小于-lt、等于-eq、不等于-ne
(关系运算符只支持数字并且是整数,不支持字符串,除非字符串的值是数字)

布尔运算符:与-a 、或-o 、非! 、异或^

逻辑运算符:与&&、或||

字符串运算符:字符串长度是0为真-z 、字符串长度不是0为真-n 、相等== 、不相等!=

文件测试运算符: 文件(包括目录)存在-e 、文件为空(文件大小为0)-s
                              普通文件(既不是目录,也不是设备文件)-f 、目录-d
                               块设备文件-b 、字符设备文件-c、文件是有名管道(pipe 或是 FIFO)-p
                              可读-r 、可写-w 、可执行-w
                               设置了SGID位-g 、设置了SUID位-u 、设置了粘着位(Sticky Bit)-k *

2、条件测试的表达式

       — test 选项 参数
       — [ 选项 参数 ] ----> [[ 选项 参数 ]]
     所有字符与运算符直接用“空格”分开,不能连到一起。[[ ]] 支持正则。
      test提供一种检测if-then语句中不同条件的方法,如果test命令中列出的条件评估值为true,test命令以0状态码退出。
      条件测试操作本身不显示出任何信息。测试的条件是否成立主要体现在命令执行后的返回状态(即 $?),所以可以在测试后查看变量$?的值来做出判断,或者结合&&、||等逻辑操作显示出结果(或作其他操作)

3、使用运算符做条件测试
 

<1> 整数值比较

       使用关系运算符(-ge -gt -lt -le -eq -ne),这里是不能使用大于>,小于<的。
      在[ ]表达式中,shell会将他们当做重定向符号,若想使用,大于和小于符号一定要转义,加上转义符号\,即 \> 和 \<
     而[[ ]]表达式,只是对[ ]的扩充,能够支持大于>、小于<运算,不需要转义
       案例1:对数值10、数值20判断比较
               [ 10 -lt 20 ] 或 [ 10 \< 20 ] 或 [[ 10 < 20 ]]
             实际应用中,常用于给变量赋值,然后跟特定数值比较

       案例2:监控本机内存剩余空间,判断剩余内存是否小于500M
                 mem_size=$(free |awk '/Mem/{print $4}')                    //提取内存剩余空间,赋值变量
                 if [ $men_size -le 512000 ]                                  //内存提取的空间大小是以 Kb 为单位
                then
                        echo "内存不足"
                else
                        echo "内存充足"
                fi

       <2> 字符串比较
           使用字符串运算符(==、 !=、 -z、 -n)
            常用于检测变量是否与某字符串匹配,如环境变量$USER;检测变量是否设置-z等
              案例1:检测本机当前用户是否为超级管理员
                         [ $USER == "root" ]           //测试
                         echo $?
             注意:=虽然有相等的意思,但是它一般表示赋值,所以判断尽量使用==

       <3> 检测文件/目录的各种属性
              使用文件测试运算符(-e -d -f -r -w -x 等)
               案例1:测试备份目录是否存在,不存在则自动创建该目录
                           [ ! ‐d /mysqlbackup ] && mkdir /mysqlbackup

      <4> 多个条件/操作的逻辑组合(与、或、非、异或)
                   与(-a、&&):当两边同为真的时候,结果为真
                   或(-o、 || ):当两边都为假的时候,结果为假。
                    非( ! ) :取反
                  异或( ^ ) :当左右都相同的时候,结果为假;当左右不相同的时候,结果为真
               在[ ]表达式中,多条件的逻辑组合使用布尔运算符(!、-o、-a),不支持  && 、   ||
                在[[ ]]表达式中,多条件的逻辑组合使用逻辑运算符(&& 、||),不支持  -a  、 -o
                案例1:监控本机内存和硬盘剩余空间,判断剩余内存是否小于 125M、根分区剩余空间是否小于 1000M
                          disk_size=$(df / |awk '/\//{print $4}')                       //提取根分区剩余空间
                           mem_size=$(free |awk '/Mem/{print $4}')               //提取内存剩余空间
                           if [ $disk_size ‐le 1024000 ‐a $mem_size ‐le 128000 ];then
                                echo "内存和硬盘剩余空间不足"
                          else
                                echo "一切OK"
                          fi
                          或 者使用双中括号 [[ ]]表达式进行条件测试
[[ $disk_size < 1024000 && $mem_size < 128000 ]]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息