文章目录
一、 条件测试
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 | 测试是否为链接文件 |
执行条件测试操作以后,通过预定义变量$?可以获得测试命令的返回状态值,从而判断该条件是否成立。例如,执行一下操作可测试目录/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