Shell编程中经常需要判断文件状态、字符串是否相等以及两个数值大小等情况,基于这些比较结果再做执行相关操作。本文主要讲述文件状态、字符串、数值大小的判断比较方法。

文件状态判断

文件状态的判断通常使用test命令完成,test命令有2种基本格式:test condition / [ condition ]。后者使用时,需注意在条件两边加上空格,此种格式最为常用。

判断文件状态的表达式有很多,常用表达式如下:

-e  判断文件或目录存是否存在
-f  判断是否为文件
-d  判断是否为目录
-r  判断文件是否有可读权限
-w  判断文件是否有可写权限
-x  判断文件是否有可执行权限
-s  判断文件存在并且大小大于0

下面来看下判断文件是否存在的例子。代码如下:

#!/bin/bashfilename="/etc/passwd"if [ -e "${filename}" ];thenecho "${filename} exist"
elseecho "${filename} not exist"
fi

字符串比较

字符串比较是条件判断中很重要的一部分,字符串比较常用格式为:[ Str1 operator Str2 ],常用的字符串比较操作符格式如下:

Str1 == Str2 判断Str1是否等于Str2
Str1 != Str2 判断Str1是否不等于Str2
-z Str 判断Str是否为空
-n Str 判断Str是否不为空

下面我们来看下个获取键盘输入并判断输入字符串是否为Yes的例子,代码如下:

#!/bin/bash
read -p "Please input Yes or No:" YN #获取键盘输入并保存到变量YN
if [ "${YN}" == "Yes" ];thenecho "Continue"
elseecho "Abort"
fi

数字大小比较

数值比较格式为:[ number1 operator number2 ],常用的数值比较操作符如下:

num1 -eq num2 判断num1与num2是否相等。
num1 -ne num2 判断num1与num2是否不相等。
num1 -gt num2 判断num1是否大于num2
num1 -lt num2 判断num1是否小于num2
num1 -le num2 判断num1是否小于等于num2
num1 -ge num2 判断num1是否大于等于num2

为了记忆这些数字操作字符,可以这么理解-eq(equal)、-ne(not equal)-gt(greater than)、-lt(less than)、-le(less or equal)、-ge(greater or equal)。下面看下数字大小比较的基本实例,如下

#!/bin/bashinput_str=1
if [ ${input_str} -eq 1 ];thenecho "input number equal to 1"
elseecho "input number not equal to 1"
fi

布尔运算符

布尔运算符主要有3种形式:! 非关系,表示对条件结果取反、-a 与关系、-o 或关系。通过利用布尔运算符,可以增加条件判断关系。

(1)! 非关系,对条件结果取反。使用格式为:[ ! 条件表达式 ]。假设需求为判断目录不存在的情况下,创建目录,代码如下:

#!/bin/bashDIR="/home/oracle"
if [ ! -d "${DIR}" ];then mkdir -p "${DIR}"
fi

(2)-a 与关系,只有第1个条件表达式为真,才会执行第2个条件表达式。表达式全部为真,结果为真。使用格式为:[ 条件表达式1 -a 条件表达式2 ]。

input_str="Yes"
if [ -n "${input_str}" -a "${input_str}" == "Yes" ];thenecho "Check Success,Continue"
elseecho "Check Fail,abort"
fi

(3)-o 或关系,只要有一个表达式为真,则为真。第1个表达式为假,同样会执行第二个表达式。使用格式为:[ 条件表达式1 -o 条件表达式2 ]。

input_str="YES"
if [ ${input_str} == "yes" -o "${input_str}" == "YES" ];thenecho "Check Success,Continue"
elseecho "Check Fail,abort"
fi

逻辑判断符

逻辑判断符有2种:&& 与关系、|| 或关系。

(1)&& 与关系。表达式全部为真,结果为真。使用格式为:[[ 条件表达式1 && 条件表达式2 ]] 或者 [ 条件表达式1 ] && [ 条件表达式2 ]

#!/bin/bashinput_str="Yes"
if [ -n "${input_str}" -a "${input_str}" == "Yes" ];thenecho "Check Success,Continue"
elseecho "Check Fail,abort"
fi

(2)|| 或关系。有一个表达式为真,则结果为真。使用格式为:[[ 条件表达式1 || 条件表达式2 ]] 或者 [ 条件表达式1 ] || [ 条件表达式2 ]

#!/bin/bashinput_str="YES"
if [[ ${input_str} == "yes" || "${input_str}" == "YES" ]];thenecho "Check Success,Continue"
elseecho "Check Fail,abort"
fi

也可以写成如下格式:

#!/bin/bashinput_str="YES"
if [ ${input_str} == "yes" ] || [ "${input_str}" == "YES" ];thenecho "Check Success,Continue"
elseecho "Check Fail,abort"
fi

(3)&&与||的典型用法。

#!/bin/bashinput_str="yes"
[ "${input_str}" == "yes" -o "${input_str}" == "YES" ] && echo "Check Success,Continue" || echo "Check Fail,abort"

expr用法

expr命令不仅可以用于整数值的计算,也可以用于判断变量是否为数字。

$ var=12
$ expr ${var} + 1 >/dev/null 2>&1
$ echo $?  <-- 如果变量全为数字,返回0
0
$ var="abc"
$ expr ${var} + 1 >/dev/null 2>&1
$ echo $? <-- 如果变量不全为数字,返回非0
2

在shell编程使用expr判断变量是否为全部数字时,可以采用如下形式

#!/bin/bashvar=12
if expr ${var} + 1 > /dev/null 2>&1;thenecho "${var} is numeric"
elseecho "${var} not numeric"
fi

转载于:https://www.cnblogs.com/linyfeng/p/9095119.html

Shell条件表达式相关推荐

  1. Shell 条件表达式的正则匹配

    Shell 编程中,我们可以使用双中括号运算符 [[]] 和 =~ 来判断字符串是否匹配给定的正则表达式,例如匹配以 lvlv 结尾的字符串: filelist="lvlvcheck dab ...

  2. shell中的条件表达式

    条件表达式返回的结果都为布尔型 真为1,假为0 条件测试的表达式 [expression] [[expression]] test expression 这三种条件表达式的效果是一样的 比较符 整数比 ...

  3. 【Linux学习笔记④】——Shell程序设计【变量 输入与输出 条件表达式 判断语句 循环语句 Shell函数】

    ⌛️ 文章目录 一.Shell 概述 二.Shell 脚本的定义与执行 2.1 Shell 脚本的定义 2.2 Shell 脚本的执行 三.Shell 变量 3.1 用户自定义变量 3.2 环境变量 ...

  4. sybase不支持的条件表达式_包教包会!7段代码带你玩转Python条件语句(附代码)...

    来源:大数据 本文约5200字,建议阅读10分钟. 本文介绍了Python条件语句常用的7段代码. [ 导 读 ]条件语句通过一个或多个布尔表达式的执行结果(真值或假值)决定下一步的执行方向.所谓布尔 ...

  5. linux系统中shell脚本最全详解二shell条件判断语法介绍函数分析

    目录 一.shell判断句 1.if条件判断语句 2.test判断 二.语法介绍 1.shell运算符 2.shell循环语句 三.shell函数 一.shell判断句 1.if条件判断语句 if语法 ...

  6. Shell ❀ 条件判断语句

    文章目录 四.条件判断 1.if 单分支格式 1.1 语法格式 1.2 操作案例 2.if-else 双分支格式 2.1 语法格式 2.2 操作案例 3.if-elif-else 多分支结构 3.1 ...

  7. shell条件语句及循环语句

    if 语句的结构 在 Shell 脚本应用中,if 语句是最为常用的一种流程控制方式,用来根据特定的条件测试结果,分别执行不同的操作(如果--那么--).根据不同的复杂程度,if 语句的选择结构可以分 ...

  8. 2021年大数据常用语言Scala(七):基础语法学习 条件表达式

    条件表达式 条件表达式就是if表达式,if表达式可以根据给定的条件是否满足,根据条件的结果(真或假)决定执行对应的操作.scala条件表达式的语法和Java一样. 有返回值的if 与Java不一样的是 ...

  9. 改善代码设计 —— 简化条件表达式(Simplifying Conditional Expressions)

    系列博客 1. 改善代码设计 -- 优化函数的构成(Composing Methods) 2. 改善代码设计 -- 优化物件之间的特性(Moving Features Between Objects) ...

  10. JAVA条件表达式的陷阱

    Map<String, Integer> map = new HashMap<String, Integer>();  map.put("count", n ...

最新文章

  1. python画图武汉加油-python实现“武汉加油”点阵字
  2. JDBC操作数据库的基本流程
  3. leetcode —— 235. 二叉搜索树的最近公共祖先
  4. 2017.3.17 祭祀 失败总结
  5. 百度云BaaS体系揭秘,突破共识机制、单机计算和串行处理三大瓶颈
  6. Linux常用命令汇总--cat
  7. MySQL安装及使用手册
  8. Unity粒子特效工具需求文档
  9. 2.5 js格式化时间库
  10. 自制力差的元凶及习惯的养成过程
  11. 笔记本电脑连接无线局域网怎么设置?
  12. 谷歌、百度、搜狗、有道搜索个人之比较
  13. 北京医保可报销的定点医院
  14. 7种将字符串反转的 Java 方法
  15. practice是什么意思_practice是什么意思|practice的中文翻译 - 医学词典
  16. 「Jetpack - Paging3使用」
  17. 数据结构课程设计:魔王语言解释
  18. 微信公众号开发,扫描二维码事件推送丢失参数问题
  19. 机房机柜专用UPS不间断电源的使用寿命能够达到多久?
  20. smart原则_如何建立学习目标:这个SMART原则,你要了解,家长看懂教给孩子

热门文章

  1. 如何不重启热更新线上 Java 代码?
  2. Google深度学习TensorFlow最好的入门文章!
  3. 搞定 Linux Shell 文本处理工具,看完这篇集锦就够了
  4. 吐血推荐珍藏的Chrome插件
  5. sublime text3 python找不到文件路径_如何在sublime3 项目设置中设置 python 解释器的路径?...
  6. nosql数据库之Redis持久化、备份和主从配置
  7. d3.js(v5.7)的node与数据匹配(自动匹配扩展函数)
  8. SQL Server 复制:事务发布
  9. iOS :APP 提交描述注意事项
  10. Elasticsearch核心知识大纲脑图