文章目录
一、 条件测试
1.1 test命令
-
测试表达式是否成立,若成立返回0,否则返回其他数值
格式1:test 条件表达式 格式2:[ 条件表达式 ] PS:[空格 表达式 空格]
条件表达式,对数值(动作或处理对象)来判断是与否
test是命令集操作字符
[ 条件表达式 ] ——至少应该有一个空格
[ ]代表了表达式
输入完后可以echo 一个$?来查看,是0就正确,非0就代表异常
echo $?
1.2 文件测试
格式:[ 操作符 文件或目录 ]
常用的测试操作符
| 常用操作符 | 说明 |
|---|---|
| -d | 测试是否为目录(Directory) |
| -e | 测试目录或文件是否存在(Exist) |
| -f | 测试是否为文件(File) |
| -r | 测试当前用户是否权限读取(Read) |
| -w | 测试当前用户是否有权限写入(Write) |
| -x | 测试当前用户是否有权限执行(eXcute) |
| -b | 测试是否为设备文件 |
| -c | 测试是否为字符设备文件 |
| -s | 测试存在且文件大小为空 |
| -L | 测试是否为链接文件 |
- 执行条件测试操作以后,通过预定义变量 ? 可以获得测试命令的返回状态值,从而判断该条件是否成立。例如,执行一下操作可测试目录 / m e d i a / 是否存在,如果返回值 ?可以获得测试命令的返回状态值,从而判断该条件是否成立。例如,执行一下操作可测试目录/media/是否存在,如果返回值 ?可以获得测试命令的返回状态值,从而判断该条件是否成立。例如,执行一下操作可测试目录/media/是否存在,如果返回值?为0,表示存在此目录,否则表示不存在或者虽然存在或者虽然存在但不是目录。
实例



创建目录


1.3 整数值比较
[ 整数1 操作符 整数2 ]
常用的测试操作符
| -eq | 等于(Equal) |
|---|---|
| -ne | 不等于(Not Equal) |
| -gt | 大于(Greater Than) |
| -lt | 小于(Lesser Than) |
| -le | 小于或等于(Lesser or Equal) |
| -ge | 大于或等于(Greater or Equal) |
判断who下面用户是否小于4,如果小于4,就输入“用户太少”

查看内存命令: free -m

过滤出此行

1.4 字符串比较
格式1:[ 字符串1 = 字符串2 ]
[ 字符串1 ! = 字符串2 ]
格式2:[ -z 字符串 ]
常用的测试操作符
| 常用操作符 | 说明 |
|---|---|
| = | 字符串内容相同 |
| != | 字符串内容不同,“ ! ”表示相反的意思 |
| -z | 字符串内容为空 |
| -n | 检查是否有字符串存在 |


1.5 逻辑测试
格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2
常用的测试操作符
| 常用操作符 | 说明 |
|---|---|
| -a或&& | 逻辑与,“而且”的意思 |
| -o或丨丨 | 逻辑或,“或者”的意思 |
| ! | 逻辑否 |
实例:

方法1:

方法2:


二、if语句的结构
2.1 单分支结构


实例




没有目录,就创建成功;有目录,就创建失败




单个括号( [ ] ):必须要有空格 两个字符或数字之间的比较左右必须有空格
条件判断:
test是一种形式,[ ]中间只能使用 = 和 != 比较字符串,如果使用< 、>需要进行转义 \.
然后中间如果比较数字要用 -lt 等符号,不能使用 \< 比较数字,他会当成字符串处理
两个括号 [[ ]] :可用于处理逻辑命令,也可以处理字符串是否相等,且使用< 、>不用转义符
2.2 双分支结构


实例




查询开启apache的服务



2.3 多分支结构





实例
以考试的分数为例



输入非法字符时,就会显示报错信息;此时就要对脚本进行完善。

2.4 嵌套语句
例子
判断httpd服务有没有启动
if 判断是否启动
if 如果启动-----输出已启动
如果没启动-----判断是否安装-----如果安装-----启动
如果没安装-----安装-----如果安装成功-----启动
如果安装不成功------报错
ps aux | grep httpd | grep -v grep ——查询过滤httpd服务
if [ $? -ne 0 ];then ——有等于0,没有不等于0
if [ "$(rpm -q httpd)" == "未安装软件包 httpd " ];then ——如果为非0,表示没有
注意:这里等号两边不能加空格
yum -y install httpd ——下载httpd服务
systemctl start httpd ——开启服务
else ——如果已存在安装包,只需要直接开启httpd服务即可
echo "httpd is running" ——如果为0,表示该服务正在运作
fi
三、case语句
case 语句可以使脚本程序的结构更加清晰、层次分明,常用语服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写。
case 语句主要适用于一下情况:某个变量存在多重取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个不同的条件,而 case 语句只是判断一个变量的不同取值。
3.1 case多分支结构

case 行尾必须为单词“ in ”,每一模式必须以右括号“ ) ”结束。
双分号“ ;; ”表示命令序列的结束。
模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]“;还可以用竖杠符号“ | ”表示或,如” A|B “。
最后的” *) "表示默认模式,其中的 *相当于通配符。

#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "你输入的是字母"
;;
[0-9])
echo "你输入的是数字"
;;
*)
echo "你输入的是空格,*,_,等特殊字符"
esac
3.1.1 编写Apache启动服务脚本

Shell条件测试与分支语句详解
本文主要介绍了Shell中的条件测试和分支语句。条件测试包括test命令、文件测试、整数值比较、字符串比较和逻辑测试;分支语句涵盖if语句的单分支、双分支、多分支和嵌套结构,以及case语句的多分支结构,并给出了编写Apache启动服务脚本的示例。
&spm=1001.2101.3001.5002&articleId=124437604&d=1&t=3&u=c19b178d2ab04ac7ad0fe6dd84f12cf3)
2415

被折叠的 条评论
为什么被折叠?



