zoukankan      html  css  js  c++  java
  • Linux 比较判断运算(if else)

    介绍

    本篇文章主要是列举在shell命令中常出现的一些用来做比较的运算符,这些运算符是编写shell脚本的基础;

    if else基本语法

    1、基本语法:
    if [ command ]; then
    符合该条件执行的语句
    fi
    2、扩展语法:
    if [ command ];then
    符合该条件执行的语句
    elif [ command ];then
    符合该条件执行的语句
    else
    符合该条件执行的语句
    fi

    数值运算符

    注意:数值运算符只是针对数值的比较,如果用来比较的是字符或者字符串则会返回报错“ integer expression expected”

      -eq 等于则为真,如果是对整数进行比较相当于“=”

      -ne 不等于则为真,如果是对整数进行比较相当于“!=”

      -gt 大于则为真,如果是对整数进行比较相当于“>”

      -ge 大于等于则为真,如果是对整数进行比较相当于“>=”

      -lt 小于则为真,如果是对整数进行比较相当于“<”

      -le 小于等于则为真,如果是对整数进行比较相当于“<=”

    字符串比较符

    =:字符串包含的文本是否一样

    == 两个字符串是否相等

    >:比较字母的大小,比如var1 > var2,如果var1字母大于var2则返回真

    <:和大于相反

    != 两个字符串不相等

    -z 空字符串

    -n 非空字符串

    注意:字符串的比较有时候有可能需要用双中括号“[[   ]]”,比如调用了命令进行比较,如果这个时候还是使用单中括号会报错,如下:

    #!/bin/bash
    var1="a";
    var2="a"
    if [[ `cat $var1` = `cat $var2` ]]
    then
    echo "eq"
    else
    echo "neq"
    fi

    cat命令应用的必须是个文件,不能直接引号内容。

    文件运算符

    文件/目录判断:

    [ -a FILE ] :如果 FILE 存在则为真。

    [ -b FILE ] :如果 FILE 存在且是一个块特殊文件则为真。

    [ -c FILE ] :如果 FILE 存在且是一个字特殊文件则为真。

    [ -d FILE ] :如果 FILE 存在且是一个目录则为真。

    [ -e FILE ] :如果 FILE 存在则为真。

    [ -f FILE ] :如果 FILE 存在且是一个普通文件则为真。

    [ -g FILE ] :如果 FILE 存在且已经设置了SGID则为真。

    [ -h FILE ] :如果 FILE 存在且是一个符号连接则为真。

    [ -k FILE ] :如果 FILE 存在且已经设置了粘制位则为真。

    [ -p FILE ] :如果 FILE 存在且是一个名字管道(F如果O)则为真。

    [ -r FILE ] :如果 FILE 存在且是可读的则为真。

    [ -o OPTIONNAME ] :如果 shell选项 “OPTIONNAME” 开启则为真。

    [ -s FILE ] :如果 FILE 存在且大小不为o则为真。

    [ -t FD ] :如果文件描述符 FD 打开且指向一个终端则为真。

    [ -u FILE ] :如果 FILE 存在且设置了SUID (set user ID)则为真。

    [ -w FILE ] :如果 FILE 如果 FILE 存在且是可写的则为真。

    [ -x FILE ] :如果 FILE 存在且是可执行的则为真。

    [ -z STRING ]: “STRING” 的长度为零则为真。

    [ -O FILE ]:如果 FILE 存在且属有效用户ID则为真。

    [ -G FILE ]:如果 FILE 存在且属有效用户组则为真。

    [ -L FILE ] :如果 FILE 存在且是一个符号连接则为真。

    [ -n string ]:判断内容是否为空,不为空是真

    [ -N FILE ]: 如果 FILE 存在 and has been mod如果ied since it was last read则为真。

    [ -S FILE ] :如果 FILE 存在且是一个套接字则为真。

    [ FILE1 -nt FILE2 ] :如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not则为真。

    [ FILE1 -ot FILE2 ] :如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。

    [ FILE1 -ef FILE2 ] :如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。

    建议也使用双中括号

    字符串判断
    [ -z STRING ] 如果STRING的长度为零则返回为真,即空是真
    [ -n STRING ] 如果STRING的长度非零则返回为真,即非空是真
    [ STRING1 ]  如果字符串不为空则返回为真,与-n类似
    [ STRING1 == STRING2 ] 如果两个字符串相同则返回为真
    [ STRING1 != STRING2 ] 如果字符串不相同则返回为真
    [ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面则返回为真。
    [ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”后面则返回为真。

    数值判断
    [ INT1 -eq INT2 ] INT1和INT2两数相等返回为真 ,=
    [ INT1 -ne INT2 ] INT1和INT2两数不等返回为真 ,<>
    [ INT1 -gt INT2 ] INT1大于INT2返回为真 ,>
    [ INT1 -ge INT2 ] INT1大于等于INT2返回为真,>=
    [ INT1 -lt INT2 ] INT1小于INT2返回为真 ,<
    [ INT1 -le INT2 ] INT1小于等于INT2返回为真,<=

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

    其他判断
    [ -t FD ] 如果文件描述符 FD (默认值为1)打开且指向一个终端则返回为真
    [ -o optionname ] 如果shell选项optionname开启则返回为真


    IF高级特性:
    双圆括号(( )):表示数学表达式
    在判断命令中只允许在比较中进行简单的算术操作,而双圆括号提供更多的数学符号,而且在双圆括号里面的'>','<'号不需要转意。

    双方括号[[ ]]:表示高级字符串处理函数
    双方括号中判断命令使用标准的字符串比较,还可以使用匹配模式,从而定义与字符串相匹配的正则表达式。

    可以用test命令检查某个条件是否成立,它可以进行数值、字符串和文件3个方面的测试,如果使用了test那么就不要使用[]将命令括起来,否则会返回报告如“too many arguments” 。

    #!/bin/bash
    var1="a"
    var2="b"
    var3="/data/test"
    if test  $var1 == $var2
     then
     echo "$var1=$var2"
    else
     echo "$var1!=$var2"
    fi
     echo "$var1,$var2"
    
    if test -x "$var3"
    then
    echo "可执行文件"
    fi

    逻辑判断符

    -a:与操作,可以用&&代替

    -0:或操作,可以用||代替 

    !:非操作

    算术运算符 

    +

    -

    *

    /


    +=:例如var+=1等同于var=var+1

    -=

    *=

    /= 

    位操作符

     

     注意:所有的这些运算符前后都要有空格否则就不是比较而是赋值操作。

    总结

    备注:

        作者:pursuer.chen

        博客:http://www.cnblogs.com/chenmh

    本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

    《欢迎交流讨论》

     

  • 相关阅读:
    【支付宝支付】手机网页内 支付宝支付实现过程
    【微信支付】微信端的手机网页支付 开发流程
    【Linux】Linux下 环境变量/etc/profile、/etc/bashrc、~/.bashrc的区别【转】
    SLF4J 和 Logback 在 Maven 项目中的使用方法
    打造Spring Cloud构建微服务架构的最全资料
    WebApi安全性 使用TOKEN+签名验证
    <meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" />的意义
    request.getParameter(“参数名”) 中文乱码解决方法
    Mysql的timestamp类型,自动记录数据的更新时间
    根据身份证号,取得行政区划的Javascript实现
  • 原文地址:https://www.cnblogs.com/chenmh/p/5377756.html
Copyright © 2011-2022 走看看