07 Shell Script条件测试表达式

Shell Script条件测试表达式

一、Shell条件测试

​ 条件测试描述:Linux的Shell中存在一组测试命令,该组命令用于测试某种条件或某几种条什是否真实存在。测试命令是判断语句和循环语句中的条件测试工具,所以,其对于编写Shell非常重要

​ 测试命令用于测试表达式的条件的真假。如果测试的条件为真,则返回一个0值;如果测试条件为假,将返回一个非0整数值

一)测试语句表达式

​ 我们在写一个linux脚本的时候,有时需要判断字符串是否相等,可能还要检查文什状态或是数字测试,测试方法如下:

​ test命令用于测试字符串,文件状态和数字

​ test一般有两种格式

​ test condition

​ [condition] 使用方括号时,要注意在条件两边加上空格

​ 例子

sh 复制代码
#!/bin/bash
echo "test the /opt"
test -d /opt
echo $?

二)测试文件状态

​ -b filename 当filename存在并且是块文件时返回真(返回0)

​ -c filename 当filename存在并且是字符文件时返回真

​ -d pathname 当pathname存在并且是一个目录时返回真

​ -e pathname 当由pathname指定的文件或目录存在时返回真

​ -f filename 当filename存在并且是正规文件时返回真

​ -g pathname 当出pathname指定的文件或目录存在并且设置了SGID位时返回真

​ -h filename 当filename存在并且是符号链接文件时返回真(或-L filename)

​ -k pathname 由pathname指定的文件或日录存在并且设置了"粘滞"位时返回真

​ -p filename 当filename存在并且是命名管道时返回真

​ 测试命令如下:

sh 复制代码
if [ -b /dev/sdb ] ;then echo "yes" ;else echo "no";fi

​ 测试文件状态时可能会用到逻辑操作符

​ -a逻辑与,操作符两边均为真,结果为真,否则为假

​ -o逻辑或,操作符两边一边为真,结果为真,否则为假

​ !逻辑否,条件为假,结果为真

sh 复制代码
#!/bin/bash
echo "test"
# 测试hello和hi文件是否有"写"权限
test -w /opt/hello.sh -a -w /opt/hi.sh
echo $?

三)常见数值测试

​ 整数比较运算符格式:

​ test num1整数比较运算符 num2

​ [num1 整数比较运算符 num2]

​ 整数比较运算符不可用于字符串、文件、浮点型数值操作,同样字符串操作也不可用于其他的操作,若误用,将产生不必要的错误。

整数比较运算符 描述
num1 -eq num2 如果num1等于num2,测试结果为0
num1 -ge num2 如果num1大于或等于num2,测试结果为0
num1 -gt num2 如果num1大于num2,测试结果为0
num1 -le num2 如果num1小于或等于num2,测试结果为0
num1 -lt num2 如果num1小于num2,测试结果为0
num1 -ne num2 如果num1不等于num2,测试结果为0

​ 例如:

sh 复制代码
# 创建sh文件
[root@localhost ~]# vi myshell.sh


# 写入内容
#!/bin/bash
age=18
[ $age -ge 16 -a $age -lt 35 ]
echo $?
~


# 运行结果
[root@localhost ~]# bash myshell.sh
0
相关推荐
晚风予卿云月25 分钟前
【linux】进程优先级
linux·运维·服务器
YJlio41 分钟前
用女娲蒸馏 Mark Russinovich 排障思维:打造 Windows 桌面运维专家 Skill
运维·windows·飞书·ai办公·多维表格·飞书v7.63·飞书问卷
yyuuuzz43 分钟前
aws注册过程中的常见问题梳理
运维·服务器·网络·云计算·github·aws
德迅云安全-小潘43 分钟前
手游架设全攻略:服务器选型、配置与部署一站式指南
运维·服务器
CDN3601 小时前
2026年服务器运维实战:从eBPF内核观测到Serverless边缘计算
运维·服务器·serverless
千百元1 小时前
华为应用生成 .p12、.cer、.p7b
运维·服务器
Max_uuc1 小时前
【调度心法】别用 Mutex 制造“人质危机”!撕碎互斥锁的防御幻觉,论优先级反转与火星探测器的史诗级瘫痪
linux·运维·制造
小趴菜要进步1 小时前
Kali/Linux 更改国内镜像源
linux·运维·服务器
2301_816374331 小时前
Nginx的源码编译
运维·nginx
kuaixunbao1 小时前
2026年5月PCB厂家推荐:口碑好的产品解决高频信号传输稳定性痛点
大数据·运维·网络