shell的条件判断

判断式
  • 逻辑判断

    [ ! EXPR ]          逻辑非,如果 EXPR 是 false,则返回为真。
    [ EXPR1 -a EXPR2 ]  逻辑与,如果 EXPR1 and EXPR2 全真,则返回为真。
    [ EXPR1 -o EXPR2 ]  逻辑或,如果 EXPR1 or EXPR2 为真,则返回为真。
    [ ] || [ ]          用 OR 来合并两个条件
    [ ] && [ ]          用 AND 来合并两个条件
    
  • if 判断式

    if [ 条件判断一 ] && (||) [ 条件判断二 ]; then
    elif [ 条件判断三 ] && (||) [ 条件判断四 ]; then
    else
        执行第三段內容程式
    fi
    
  • 双圆括号(( )):表示数学表达式

    • 在判断命令中只允许在比较中进行简单的算术操作,而双圆括号提供更多的数学符号,而且在双圆括号里面的 >< 号不需要转意。
    • 比如:[ "$a" -lt "$b" ],也可以改成双括号的形式 (("$a" < "$b"))
  • 双方括号[[ ]]:表示高级字符串处理函数

    • 在判断命令中允许使用标准的字符串比较,还可以使用匹配模式,从而定义与字符串相匹配的正则表达式。
    • 在 shell 中,[ $a != 1 || $b = 2 ] 是不允许的,要用 [[ $a != 1 || $b = 2 ]] 或者 [ $a != 1 ] || [ $b = 2 ]
  • 实例

    if (( $a < $b )); then
        # 算术操作:小于
    elif [ $a -lt $b ]; then
        # 与上边相同
    elif [[ "$str"x != "test"x || "$str"x = "str2"x ]]; then
        # 高级字符串处理
    elif [ "$str"x != "test"x ] || [ "$str"x = "str2"x ]; then
        # 与上边相同
    else
        # 不满足条件
    fi
    
数值判断
-eq   等于
-gt   大于
-lt   小于
-ne   不等于
-ge   大于等于
-le   小于等于
字符串的判断
  • 说明
    [ -z "$STR" ] 如果 STR 的长度为零,则返回为真,即空是真
    [ -n "$STR" ] 如果 STR 的长度非零,则返回为真,即非空是真
    [ "$STR1" == "$STR2" ] 如果两个字符串相同,则返回为真
    [ "$STR1" != "$STR2" ] 如果字符串不相同,则返回为真
    [ "$STR1" < "$STR2" ] 如果 STR1 字典排序在 STR2 前面,则返回为真
    [ "$STR1" > "$STR2" ] 如果 STR1 字典排序在 STR2 后面,则返回为真
    
  • 比较两个字符串是否相等
    if [[ "$test"x = "test"x ]];then
        echo yes
    fi
    
    • 注意要点一:使用单个等号;
    • 注意要点二:等号两边各有一个空格,这是unix shell的要求;
    • 注意要点三:"$test"x最后的x,这是特意安排的。
      • 因为当 $test 为空时,上面的表达式就变成了 x = testx,显然是不相等的。
      • 而如果没有这个 x,表达式就会报错:[: =: unary operator expected
  • 字符串( s t r ) 是 否 包 含 另 一 个 字 符 串 ( str)是否包含另一个字符串( str)(str1)
    # 方法一
    if [[ $str =~ $str1 ]];then
        echo yes
    fi
    
    # 方法二
    if [ `echo $str | grep -e '$str1'` ];then
        echo yes
    fi
    
  • 字符串($str)是否以dx开头
    if [[ $str =~ ^dx ]];then
        echo yes
    fi
    
文件(文件夹)的判断
  • 文件比较符
    -e  判断对象是否存在
    -d  判断对象是否存在,并且为目录
    -f  判断对象是否存在,并且为常规文件
    -b  判断对象是否存在,并且为 "块-特殊" 文件
    -c  判断对象是否存在,并且为 "字-特殊" 文件
    -h  判断对象是否存在,并且为软链接
    -s  判断对象是否存在,并且长度不为0
    -r  判断对象是否存在,并且可读
    -w  判断对象是否存在,并且可写
    -x  判断对象是否存在,并且可执行
    -O  判断对象是否存在,并且属于当前用户
    -G  判断对象是否存在,并且属于当前用户组
    -L  判断对象是否存在,并且为符号链接
    -S  判断对象是否存在,并且为 socket
    -nt 判断file1是否比file2新  [ "/data/file1" -nt "/data/file2" ]
    -ot 判断file1是否比file2旧  [ "/data/file1" -ot "/data/file2" ]
    
  • 实例
    • 文件夹不存在则创建
      if [ ! -d "/data/" ];then
        mkdir /data
      else
        echo "文件夹已经存在"
      fi
      
    • 判断文件夹是否存在
      if [ -d "/data/" ];then
        echo "文件夹存在"
      else
        echo "文件夹不存在"
      fi
      
    • 文件存在则删除
      if [ ! -f "/data/filename" ];then
        echo "文件不存在"
      else
        rm -f /data/filename
      fi
      
    • 判断文件是否存在
      if [ -f "/data/filename" ];then
      echo "文件存在"
      else
      echo "文件不存在"
      fi
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值