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. 从“人肉扩缩容”到云原生容量,90 后程序员的进化
  2. RSocket:又一个REST的挑战者
  3. openssl 生成 cert.key cert.pem
  4. Python 安装第三方模块
  5. Django框架——状态保持(cookie、session)
  6. windows10下安装JDK及环境变量设置
  7. linux通过dd命令把分区,linux dd命令使用详解
  8. liunx下pytorch(python2.7)先前几个版本的安装(由于官网点击先前版本进不去)
  9. Python实现机器学习
  10. proFTPd的使用配置
  11. solver.prototxt参数解析
  12. 【图像重建】基于matlab主成分分析图像压缩重建【含Matlab源码 1173期】
  13. 项目开发文档是必须的
  14. JavaWeb图书管理系统.rar(毕业设计(论文)+毕业设计指导书+大学毕业设计任务书+图书管理系统+毕业论文答辩)
  15. 鲁大师电动车智能排行第二期出炉:哪辆电动车最“聪明”?
  16. IDEA中maven仓库依赖报错:Cannot resolve com.example:product-server:0.0.1-SNAPSHOT
  17. 将服务注册到eureka服务端
  18. 第四次作业 ——吴靖瑜
  19. 魔兽争霸3地图(WarIII Maps):妖皇传说
  20. 中国海洋大学c语言上机作业,中国海洋大学c语言程序2015春季学期上机题考试题及答案.doc...

热门文章

  1. Android上SQLite的性能优化问题
  2. 一个创业公司CEO的85条感悟
  3. 互联网公司的黑话,你都经历过吗?
  4. 程序员必备简捷开发辅助工具总结
  5. 数据结构时间复杂度_数据结构之时间复杂度分析
  6. 精通~Scrum为什么会转型困难
  7. python学习笔记 day44 表与表之间的关系
  8. Divisibility题解
  9. RabbitMQ----源码安装
  10. mysql cluster推荐配置