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

文件状态判断

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

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

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

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

#!/bin/bash

filename="/etc/passwd"

if [ -e "${filename}" ];then
echo "${filename} exist"
else
echo "${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" ];then
echo "Continue"
else
echo "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/bash

input_str=
if [ ${input_str} -eq ];then
echo "input number equal to 1"
else
echo "input number not equal to 1"
fi

布尔运算符

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

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

#!/bin/bash

DIR="/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" ];then
echo "Check Success,Continue"
else
echo "Check Fail,abort"
fi

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

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

逻辑判断符

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

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

#!/bin/bash

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

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

#!/bin/bash

input_str="YES"
if [[ ${input_str} == "yes" || "${input_str}" == "YES" ]];then
echo "Check Success,Continue"
else
echo "Check Fail,abort"
fi

也可以写成如下格式:

#!/bin/bash

input_str="YES"
if [ ${input_str} == "yes" ] || [ "${input_str}" == "YES" ];then
echo "Check Success,Continue"
else
echo "Check Fail,abort"
fi

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

#!/bin/bash

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

expr用法

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

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

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

#!/bin/bash

var=
if expr ${var} + > /dev/null >&;then
echo "${var} is numeric"
else
echo "${var} not numeric"
fi

Shell条件表达式的更多相关文章

  1. Shell 条件表达式汇总

    条件表达式 文件表达式 if [ -f  file ]    如果文件存在if [ -d ...   ]    如果目录存在if [ -s file  ]    如果文件存在且非空 if [ -r f ...

  2. shell 条件表达式

    1.条件测试的常用语法如下 1.test 测试表达式 2.[ 测试表达式 ] #两边需要有空格 3.[[ 测试表达式 ]] 4.(( 测试表达式 )) 说明: 第一种和第二种是等价的,第三种是扩展的t ...

  3. shell(shell变量、条件表达式、流程控制)

    本章内容: 变量 运算 if语句 for语句 while语句 break.continue 实例 shell变量 1.shell变量简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数 ...

  4. shell之条件表达式

    conditional expressions are used by the [[ compound command and the test and [ builtin commands. ari ...

  5. shell中的条件表达式

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

  6. shell 的条件表达式及逻辑操作符简单介绍

    查看系统的shell: cat /etc/shells 文件测试表达式: -f 文件  文件存在且为普通文件则真,即测试表达式成立. -d 文件  文件存在且为目录文件则真,即测试表达式成立. -s ...

  7. 【第四章】Shell 条件测试表达式

    shell中条件测试的三种格式: 格式1: test 条件表达式格式2: [ 条件表达式 ]格式3: [[ 条件表达式 ]] 使用test: [root@host- ~]# test -f file ...

  8. 『忘了再学』Shell基础 — 28、AWK中条件表达式说明

    目录 1.AWK的条件表达 2.条件表达式说明 (1)BEGIN (2)END (3)关系运算符 (4)说明AWK中条件表达式的执行过程 (5)AWK中使用正则表达式 (6)A~B练习 1.AWK的条 ...

  9. Linux Shell之表达式

    严格来说,shell中没有表达式的概念.Shell本身事实上仅仅是一堆命令的集合.当然也不是胡乱的堆在一起.而是有一定的组织.仅仅是这个组织不那么严谨.所以本文不是要真的总结所谓的表达式,而是把she ...

随机推荐

  1. Java内存泄漏简单说明

    Java语言的一个关键的优势就是它的内存管理机制.你只管创建对象,Java的垃圾回收器帮你分配以及回收内存.然而,实际的情况并没有那么简单,因为内存泄漏在Java应用程序中还是时有发生的. 下面就解释 ...

  2. linux安装和卸载软件:sudo apt-get install(remove)

    sudo apt-get install xxx sudo apt-get remove xxx

  3. 使用UtraISO为U盘制作系统启动盘

    安装最新的Ubuntu18.04操作系统: 1.在utraiso软件中打开系统的iso文件: 2.插入U盘: 3.点击[启动]选项卡,选择[写入硬盘映像]: 4.最关键的一步: 刻录校验:打上对勾: ...

  4. 【LeetCode】4. 寻找两个有序数组的中位数

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2  ...

  5. solr如何让全词匹配结果在最前面

    在全文搜索中默认排序是按照匹配度权值score排序的,权值越大位置越靠前,那为什么有很多时候全词匹配反而不在最前面那,其实很简单因为全词匹配权值也就是100,但是还有很多权值大于100的排在了前面. ...

  6. 1-scala基础

    1.scala ①定义:Scala设计的初衷是要集成面向对象编程和函数式编程的各种特性.Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序. ②特点:优雅.简洁.一行代码抵得上多 ...

  7. redis 的简单用法

    使用  :下载完后 打开任务管理器 把redis_server 进程关掉, 切换到   E:\redis 中 redis-server.exe redis.windows.conf 打开一个 cmd ...

  8. mac“打不开身份不明的开发者”

    在mac安装软件发现这样的提示 解决方法: 打开系统偏好设置-->安全与隐私-->通用-->选择任何来源 不能选择的话点击按钮锁即可编辑 没有“任何来源”选项(比如我的mac) 打开 ...

  9. Unity3D的断点调试功能

    断点调试功能可谓是程序员必备的功能了.Unity3D支持编写js和c#脚本,但很多人可能不知道,其实Unity3D也能对程序进行断点调 试的.不过这个断点调试功能只限于使用Unity3D自带的Mono ...

  10. org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI

    在重启项目中会遇到[org.springframework.web.servlet.PageNotFound] - No mapping found for HTTP request with URI ...