zoukankan      html  css  js  c++  java
  • if else以及大于、小于、等于逻辑表达式

    大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。注意这里的空格很重要。要确保方括号的空格。 
    if ....; then 
      .... 
    elif ....; then 
      .... 
    else 
      .... 
    fi

    [ -f "somefile" ] :判断是否是一个文件 
    [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限 
    [ -n "$var" ] :判断$var变量是否有值 
    [ "$a" = "$b" ] :判断$a和$b是否相等
        -r file     用户可读为真 
      -w file     用户可写为真 
      -x file     用户可执行为真 
      -f file     文件为正规文件为真 
      -d file     文件为目录为真 
      -c file     文件为字符特殊文件为真 
      -b file     文件为块特殊文件为真 
      -s file     文件大小非0时为真 
      -t file     当文件描述符(默认为1)指定的设备为终端时为真  
    ######################################################### 
    含条件选择的shell脚本          对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。基本的if条件命令选项有: - eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])

    -ne —比较两个参数是否不相等 
    -lt —参数1是否小于参数2 
    -le —参数1是否小于等于参数2 
    -gt —参数1是否大于参数2 
    -ge —参数1是否大于等于参数2 
    -f — 检查某文件是否存在(例如,if [ -f "filename" ]) 
    -d — 检查目录是否存在 
    几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。 ################################################################## 
    判断文件是否存在 
    #!/bin/sh 
    YACCESS=`date -d yesterday +%Y%m%d` 
    FILE="access_$YACCESS.log.tgz" 
    cd /data/nginx/logs
    if [ -f "$FILE" ];then 
    echo "OK" 
    else 
    echo "error $FILE" > error.log 
    mail -s "$FILE backup fail" xxxx@yyyy.com <error.log 
    fi

    ###############
    #!/bin/sh

    DIR=/data/img_cache
    DAY=`date +"%Y-%m-%d %H:%M"`
    NUM=`ls $DIR |wc -l`
    DIRNAME=`ls $DIR| grep leveldb | head -n 1 | awk '{print $NF}'`
    if [[ $NUM -gt 3 ]];then
        rm -rf $DIR/$DIRNAME
        echo "---------$DAY----($DIR)-----------------------" >> /tmp/img_cache.log
        echo "$DIRNAME Deleted successful" >> /tmp/img_cache.log
    fi

    补充:文件测试操作:
    返回true,如果:
    -e                          文件存在
    -a                          文件存在(已被弃用)
    -f                           被测文件是一个regular文件(正常文件,非目录或设备)
    -s                          文件长度不为0
    -d                          被测对象是目录
    -b                          被测对象是块设备
    -c                          被测对象是字符设备
    -p                          被测对象是管道
    -h                          被测文件是符号连接
    -L                          被测文件是符号连接
    -S(大写)                 被测文件是一个socket
    -t                          关联到一个终端设备的文件描述符。用来检测脚本的stdin[-t0]或[-t1]是一个终端
    -r                          文件具有读权限,针对运行脚本的用户
    -w                         文件具有写权限,针对运行脚本的用户
    -x                          文件具有执行权限,针对运行脚本的用户
    -u                          set-user-id(suid)标志到文件,即普通用户可以使用的root权限文件,通过chmod +s file实现
    -k                          设置粘贴位
    -O                         运行脚本的用户是文件的所有者
    -G                         文件的group-id和运行脚本的用户相同
    -N                         从文件最后被阅读到现在,是否被修改

    f1 -nt f2                文件f1是否比f2新
    f1 -ot f2                文件f1是否比f2旧
    f1 -ef f2                文件f1和f2是否硬连接到同一个文件

    二元比较操作符,比较变量或比较数字

    整数比较:
    -eq                       等于            if [ "$a" -eq "$b" ]
    -ne                       不等于         if [ "$a" -ne "$b" ]
    -gt                        大于            if [ "$a" -gt "$b" ]
    -ge                       大于等于      if [ "$a" -ge "$b" ]
    -lt                         小于            if [ "$a" -lt "$b" ]
    -le                        小于等于      if [ "$a" -le "$b" ]

    <                          小于(需要双括号)       (( "$a" < "$b" ))
    <=                        小于等于(...)                (( "$a" <= "$b" ))
    >                          大于(...)                      (( "$a" > "$b" ))
    >=                        大于等于(...)                (( "$a" >= "$b" ))

    字符串比较:
    =                          等于           if [ "$a" = "$b" ]
    ==                        与=等价
    !=                         不等于        if [ "$a" = "$b" ]
    <                          小于,在ASCII字母中的顺序:
                                if [[ "$a" < "$b" ]]
                                if [ "$a" < "$b" ]         #需要对<进行转义
    >                          大于

    -z                         字符串为null,即长度为0
    -n                         字符串不为null,即长度不为0

    本文出自 “Richard Shen运维/架构” 博客,请务必保留此出处http://lxsym.blog.51cto.com/1364623/866331

  • 相关阅读:
    android 多线程
    Uva 10881 Piotr’s Ants 蚂蚁
    LA 3708 Graveyard 墓地雕塑 NEERC 2006
    UVa 11300 Spreading the Wealth 分金币
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    HDU 4162 Shape Number
    HDU 1869 六度分离
    HDU 1041 Computer Transformation
    利用可变参数函数清空多个数组
  • 原文地址:https://www.cnblogs.com/oskb/p/3446745.html
Copyright © 2011-2022 走看看