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 ]]