一.条件测试
1.三种测试方法
①test命令测试
②[ ]测试(注意前后需要有空格)
③[[ ]]:加强版[ ],测试支持通配符(匹配字符串)和正则表达式
二.条件语句
2.1 test命令
测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为非0.
格式:
test 条件表达式
或 [ 条件表达式 ] (条件表达式的两边都需要有空格,且此方法更为常用)
选项 | 含义 |
-d | 测试是否为目录 |
-e | 测试目录或文件是否存在 |
-f | 测试是否为文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
-L | 测试是否为软连接文件 |
-nt | 判断文件A是否比文件B新 |
-ot | 判断文件A是否比文件B旧 |
-ef | 判断两个文件是否为同一文件 |
示例1
2.2 整数值比较
格式:
[ 整数1 操作符 整数2 ]
操作符 | 含义 |
---|---|
-eq | 等于(Equal) |
-ne | 不等于(Not Equal) |
-lt | 小于(Leser Than) |
-gt | 大于(Greater Than) |
-le | 小于或等于(Lesser or Equal) |
-ge | 大于或等于(Greater or Equal) |
示例1:比较两个整数大小
示例2:查询当前目录下的文件数是否大于10,如果大于,则进行提示
示例3: 查看系统内存是否低于1024M,如果低于则提示
2.3 字符串比较
格式:
[ "字符串1" = "字符串2" ] #判断是否相等
[ "字符串1" != "字符串2" ] #判断是否不等
[ -z "字符串" ] #判断字符串内容是否为空
[ -n "字符串" ] #判断字符是否存在
2.4 逻辑测试(短路运算)
格式:
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
常见条件
- -a或&&:逻辑与,“而且”的意思全真才为真
- -o或||:逻辑或,“或者”的意思一真即为真
- !:逻辑否
[ 表达式1 ] && [ 表达式2 ] 等同于 [ 表达式1 -a 表达式2 ] 等同于 [[ 表达式1 && 表达式2 ]] [ 表达式1 ] || [ 表达式2 ] 等同于 [ 表达式1 -o 表达式2 ] 等同于 [[ 表达式1 || 表达式2 ]]
三元运算符
[ 表达式 ] && a || b当条件表达式为真时,取a值;当条件表达式为假时,取b值
二.if语句
1.单分支结构
如果只有一个判断式要进行,那么我们可以使用单分支的if语句
格式:
if [ 条件判断式 ]; then#当条件判断成立时,可以进行的命令工作内容
fi #这里将if反过来写,结束if语句的意思
2.双分支结构
格式:
if 判断条件
then条件为真的分支代码else条件为假的分支代码fi
3.多分支结构
格式:
if [ 条件判断式 ]
then当条件判断成立时,可以进行的命令工作内容
elif [ 条件判断式二 ]
then当条件判断成立时,可以进行的命令工作内容
else 当上面的条件判断都不成立时,可以进行的命令工作内容
fi
实例:学生输入分数判断自己的成绩是优秀(91-100)、良好(81-90)、及格(60-80)、不及格(小于60)
vim fs.sh #创建脚本文件,注意必须.sh结尾
脚本内容:
#!/bin/bash #脚本解释器
read -p "请输入你的成绩进行判断(0-100): " key #读取用户输入的内容为变量key
if [ $key -ge 91 -a $key -le 100 ] #条件1:如果key大于等于91且小于等于100则执行then
then #key符合条件1执行此then
echo "你的成绩为优秀"
elif [ $key -ge 81 -a $key -le 90 ] #条件2:如果key大于等于81且小于等于90则执行then
then #key符合条件2执行此then
echo "你的成绩为良好"
elif [ $key -ge 60 -a $key -le 80 ] #条件3:如果key大于等于60且小于等于80则执行then
then #key符合条件3执行此then
echo "你的成绩为及格"
elif [ $key -lt 60 ] #条件4:如果key大于等于60且小于等于80则执行then
then #key符合条件4执行此then
echo "你的成绩为不及格"
else #key不符合上述任何条件则执行else
echo "输入错误,请输入0-100的正整数"
fi #结束语fi
chmod +x fs.sh #脚本添加执行权限
bash fs.sh #使用shell执行脚本,也可使用路径方式执行
三.case语句
1、使用格式
case 变量引用 in
PAT1) 符合条件1执行分支1的命令,PAT1可以使用通配符
分支1命令
;; 每个分支结束的固定格式
PAT2) 符合条件1执行分支2的命令,PAT2可以使用通配符
分支2命令
;; 每个分支结束的固定格式,可以有多个分支
*) 不符合其他任意分支的默认分支
默认分支命令
;; 分支结束的固定格式
esac case语句结束标志
注意点:
-
双分号";;"表示命令序列的结束
-
模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b
2.实例
vim case.sh #创建case.sh脚本
case.sh脚本内容:
#!/bin/bash #shell声明
cat <<EOF #cat多行重定向
1.关闭防火墙 #将1,2,3内容打印出来
2.临时关闭selinux
3.查看当前用户
EOF #多行重定向结束
read -p "请选择操作内容(1-3):" key #读取用户输入内容为变量key
case $key in #case判断 变量$key
1) #若$key等于1则执行1)内容
systemctl stop firewalld; #临时关闭防火墙命令
;; #每个分支结束符
2) #若$key等于2则执行2)内容
setenforce 0; #临时关闭selinux
;; #每个分支结束符
3) #若$key等于3则执行3)内容
user=`whoami` #定义变量user调用whoami命令执行结果反向单引号调用
echo "当前用户为$user" #输出内容当前用户为$user
;;
*) #若$key不满足上述任一条件则执行默认内容*)
echo "输出错误,请输入1-3进行选择"
esac #case语句结束标志
chmod +x case.sh #脚本添加可执行权限
bash case.sh #通过shell执行脚本