千家信息网

Shell条件测试语句及三种if语句

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,7 - Shell_条件操作测试及if语句要使Shell脚本程序具备一定的"智能",面临的第一个问题就是如何区分不同的情况以确定执行何种操作。例如,当磁盘使用率超过95%发送警告;当备份目录不存在时能
千家信息网最后更新 2026年11月01日Shell条件测试语句及三种if语句

7 - Shell_条件操作测试及if语句

要使Shell脚本程序具备一定的"智能",面临的第一个问题就是如何区分不同的情况以确定执行何种操作。例如,当磁盘使用率超过95%发送警告;当备份目录不存在时能够自动创建;当源码编译程序的配置失败则不再继续安装等。

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0,表示成功,值为其他时,表示失败。

使用专门的测试工具-test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值0为成立)

使用test命令的两种形式

A:test 条件表达式

B:[ 条件表达式 ]

以上两种方法的作用完全一样,后者为常用。但后者需要注意方括号"["、"]"与条件表达式之间至少有一个空格。

1. 文件测试

文件测试指的是根据给的路径,判断对应的是文件还是目标,或者判断文件是否有可读可写、可执行等权限。常见操作如下:

执行条件测试操作以后,通过预定义变量"$?"可以获得测试命令的返回状态,从而判断该条件是否成立。

例如:一下操作判断/media/cdrom/目录是否存在,返回值为1成立。

若测试条件不存在,则测试返回值将不为0(通常为1),如图所示:

2. 整数值比较

主要根据给定的两个值,判断第一个与第二个数的关系,如是否大于、小于、等于第二个数。常见选项如下:

整数值比较在Shell脚本应用中比较多。例如:判断已登录用户数量、开启进程数、磁盘使用率是否超标,以及软件版本是否符合要求。实际使用时,往往会通过变量引用,命令替换等方式来获取一个值。

例如:若要判断当前已登录的用户数,当超过五个时输出"Too may",可以执行以下语句。其中,已登录用户数可以通过"who | wc -l"查询,以命令替换方式进行。

0

再例如:若要判断当前可用内存(buffers/cache)大小,当低于2048MB时输出具体值,可以执行以下操作。其中"free -m"命令以MB单位输出内存信息。

3. 字符串比较

通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的Shell脚本中,也可用来判断用户输入的位置是否符合要求,常见选项如下:

例如:判断当前系统的语言环境,当发现不是"en.US"时输出提示信息"Not en.US":

再例如:在Shell脚本中,经常需要用户输入"yes"或"no"来确认某个任务,一下操作展示了确认交互的过程,当然,实际使用时还会根据变量"ACK"的取值分别执行进一步的操作。

4. 逻辑测试

是判断两个或多个条件之间的依赖关系,当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或只要有其中一个成立等情况,需要有一个测试的过程。常用选项如下:

&&:逻辑与,表示"而且",只有前后两个条件都成立时,整个测试命令的返回值才为0。使用test命令时,"&&"可改为"-a"

||:逻辑或,表示"或者",只有前后两个条件中一个成立,整个测试命令的返回值才为0。使用test命令时,"||"可改为"-o"

!:逻辑否,表示"不",只有当指定的条件不成立时,整个测试命令的返回值才为0。

"&&"、"||"通常也用于间隔不同的命令操作,其作用是相似得。

例如:若要判断当前Linux系统的内核版本是否大于2.4,可以执行以下操作。

使用if条件语句

在Shell脚本中,if语句是最为常用的一种流程控制方式,用来根据特定的条件测试结果,分别执行不同的操作(如果……那么……)

1. 单分之的if语句

if语句的"分支"指的是不同测试结果所对应的执行语句(一条或多条)。对于单分支选择结构,只有在"条件测试成立"时才会执行相应的"命令序列",否则不执行任何操作,单分支结构如下:

在上述语句结构中,条件测试操作即"[ 条件表达式 ]"语句,也可以是其他可执行的命令句;命令序列指的是一条或多条可执行的命令行,也包括嵌套使用的if语句或其他流程控制语句。

单分支的执行流程:首先判断条件测试语句的结果,返回值为0,表示条件成立,则执行then后面的命令序列,一直遇见fi结束判断为止,继续执行其他脚本代码;返回值为其他,则忽略then后面的命令序列,直接跳至fi以后执行其他脚本代码。

案例:

2. 双分支的if语句

对于双分支结构,要求针对"条件成立"、"条件不成立"两种情况分别执行不同命令序列。

双分支if语句的执行流程:首先判断条件测试操作的结果,如果成立,则执行then后的命令序列1,忽略else后的命令序列2,直到遇见fi结束判断;若不成立,则忽略then及后面的命令序列1,直接跳至else后面的命令序列2,直到遇见fi结束判断。

案例:

3. 多分支的if语句

由于if语句可以根据测试结果的成立,不成立分别执行操作,所以能够嵌套使用,进行多次判断。例如:首先判断某学生的得分是否几个,若几个则再次判断是否高于90分等,格式如下:

案例:

条件 命令 测试 语句 序列 分支 脚本 不同 用户 结果 两个 只有 文件 流程 系统 结构 表达式 逻辑 输出 变量 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网 互联网与科技发展 嘟嘟瓜互联网科技 掌上梦互联网科技 互联网科技博客 成都狮子座互联网科技 人人互联网科技是培训 科技与互联网的利与弊 福建科技产业互联网发展 崇明区互联网教育科技诚信经营 江阴互联网智能科技产品进口 亳州好赞互联网科技有限公司 怎样加入科技互联网 深圳互联网科技的发展 云南省自由互联网科技有限公司 工业互联网科技成果转化 唐山双旺合互联网科技产业园 科技互联网专业务虚会材料 瑞安市蟠桃会互联网科技有限公司 广州全民伙伴互联网科技有限公司 合肥互联网科技公司 互联网 视角下的科技创新 开启互联网科技时代小说 顶级互联网科技成果有哪些 哈尔滨屹滨互联网科技有限公司 明优互联网科技有限公司 山东星卡互联网科技有限公司官网 吉林省码上互联网科技电话 网互联网络科技 利用互联网等科技手段
0