在linux中shell是常用的命令程序,在shell中又存在很多常见的逻辑判断,

下面我们就来看看这些逻辑判断的用法以及规范。

比如可以比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。

注意这里的空格很重要。要确保方括号的空格。 否则将会报错。
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

linux中shell逻辑表达式if else以及大于、小于、等于相关推荐

  1. Linux中shell语法和脚本编写

    Linux中shell语法和脚本编写 原文地址:学习shell的语法,及脚本编写 其它相关辅助资料: 编写shell脚本所需的语法和示例 基础linux指令&简单的shell语法和脚本编写 什 ...

  2. linux中shell变量$#,$@,$0,$1,$2的含义解释

    linux中shell变量$#,$@,$0,$1,$2的含义解释:  变量说明:  $$  Shell本身的PID(ProcessID)  $!  Shell最后运行的后台Process的PID  $ ...

  3. linux中shell如何实现毫秒级别的sleep

    方法2.usleep 10000 (usleep为十的负六次方秒,详细见man usleep) 本文转自博客园知识天地的博客,原文链接:linux中shell如何实现毫秒级别的sleep,如需转载请自 ...

  4. Linux中shell的分类以及查看当前的shell

    DOS/Windows 与 Linux 的最重要的区别之一是 Linux 的命令 shell 是与操作系统相分离的一层. 目前流行的shell有ash.bash.ksh.csh.zsh,如下介绍: b ...

  5. linux中sh+$0,浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释

    摘抄自:ABS_GUIDE 下载地址:http://www.tldp.org/LDP/abs/abs-guide.pdf linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: ...

  6. linux变量中代,linux中shell变量$#,$@,$0,$1,$2和变量${0%/*}

    一直傻傻搞不清,还是梳理一下吧. linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Pr ...

  7. linux+管道+分段,Linux中shell基础、重定向、管道符、环境变量

    原标题:Linux中shell基础.重定向.管道符.环境变量 1.什么是shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器).它接收用户输入的命令并把它送入内核 ...

  8. linux下变量名长度,Linux中shell的变量介绍

    Linux中shell的变量介绍 发布时间:2020-06-24 16:20:39 来源:亿速云 阅读:112 作者:元一 这期内容当中的小编将会给大家带来有关Linux中shell的变量介绍,以专业 ...

  9. Linux中shell提示符定制

    Linux中shell提示符定制   如果您很容易使 shell 提示行变得色彩绚烂斓且带有更多信息,为什么还要坚持用单调的标准 shell 提示行呢?在这篇技巧中,Daniel Robbins 将说 ...

最新文章

  1. 对人工神经网络“开刀”,利用神经科学消融法检测人工神经网络
  2. windows 下常用命令行
  3. excel中$、、^、/、*等各种符号的使用
  4. os.environ详解
  5. 使用HazelCast进行休眠缓存:基本配置
  6. access month函数用法_学会了这7个EXCEL日期函数技巧,老板再让你加班,你找我!...
  7. [PyTorch] 神经网络处理图像
  8. 重金悬赏丨2019 华为 IoT 开发者大赛喊你加入“群聊”,倾听科技的“声音”!...
  9. linux 文件隐藏权限,linux文件基本权限、默认权限、隐藏权限和ACL权限
  10. jQuery 仿写京东轮播广告图
  11. Linux下配置完整安全的DHCP服务器详解
  12. 费曼先生 找数学家“麻烦”
  13. U盘启动BIOS设置
  14. 新时代知识产权创新发展与严格保护_保护知识产权?宣传强化治理——东安街道团结社区新时代文明实践站大力宣传《知识产权法》...
  15. NetCore游戏服务器GeekServer
  16. install -save 和 -save-dev区别
  17. mysql带中文日期转换_【MySQL】日期时间格式转换_MySQL
  18. 基于ESP32的蓝牙翻页器设计(论文附调试成功代码!!)
  19. 解决pycharm Python helpers are not copied yet to the remote host. Please wait until remote interpreter
  20. 数据类型在内存中的存储原理

热门文章

  1. pycharm专业版的学生申请激活方法
  2. Linux服务器使用和环境配置
  3. 设置实体类中字段为非数据库字段
  4. mysql获取插入数据的id_mysql插入记录后获取插入数据的id值
  5. oracle里面查找重复项,Oracle查找重复记录中最大值的记录
  6. Python-opencv 实现photoshop中的一些基本操作
  7. Unable to mount 63 GB Volume
  8. esp8266~GPIO中断和硬件定时器的正确使用
  9. HQChart使用教程1- 如何快速创建一个K线图页面
  10. 人工智能方案设计——基于事件图谱的类案同判