前言
之前我们学习了一些shell脚本的基础知识,那么现在我们会学习如何去更好的使用他们,让这些shell脚本更加的智能化。
一、条件测试
1.test命令
测试表达式是否成立的方法。通过使用“$?”命令后的返回值来判断是否成立。当返回值为0时,表示成功。返回值为非0值时,表示失败或异常。
格式
格式1:test 条件表达式
格式2:[ 条件表达式 ] #至少有一个空格
注:返回0表示成立,非0值表示条件不成立
2.文件测试
格式:[ 操作符 文件或目录 ]
常用测试操作符 | 说明 |
---|---|
-f | 测试是否为文件(File) |
-d | 测试是否为目录(Directory) |
-e | 测试目录或文件是否存在(Exist) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(Excute) |
-b | 测试是否为块设备 |
-c | 测试是否为字符设备文件 |
-s | 测试存在且文件大小为空 |
-L | 测试是否为软连接文件 |
3.整数值比较
是根据给与的2个整数值,判断第一个数与第二个数的关系,比如:大于,小于,等于。
基本格式:
[ 整数1 操作符 整数2 ] #根据给定的两个整数值,判断前后关系,比如大、小,或等于
常用的操作符 | 说明 |
---|---|
-eq | 第一个数等于第二个数(Equal) |
-ne | 第一个数不等于第二个数(Not Equal) |
-gt | 第一个数大于(Greater Than)第二个数 |
-lt | 第一个数小于(Lesser Than)第二个数 |
-ge | 第一个数大于或等于(Greater or Equal)第二个数 |
-le | 第一个数小于或等于(Lesser or Equal)第二个数 |
基本格式:
[ 整数1 操作符 整数2 ]
4.字符串比较
通常是用来检测用户输入、系统环境是否满足条件。
格式1
[ 字符串1 = 字符串2 ] #第一个字符串与第二个字符串相同
[ 字符串1 != 字符串2 ] #“!”表示取反,即第一个和第二个字符串不相同
格式2
[ -z 字符串 ] #检查字符串是否空值
[ -n 字符串 ] # 检查字符集是否存在
常用的测试操作符 | 解释 |
---|---|
= | 第一个字符串与第二个字符串内容相同 |
!= | 第一个字符串与第二个字符串内容不同,!号表示相反的意思 |
-z | 检查字符串内容是否为空,对于未定义或赋予空值的变量将视为空串 |
5.逻辑测试
格式1:[ 表达式 1 ] 操作符 [ 表达式2 ]...
格式2:命令1 操作符 命令2 ...
常用测试操作符:
-a或&&:逻辑与,“而且”的意思,得前后条件都符合
-o或||:逻辑或,“或者” 的意思,二者其中符合一即可
!:逻辑否,只有当指定的条件不成立的时候,结果才成立
“&&”、“||”操作符能够正常存在于“[[ ]]”条件判断结构中,但是如果出现在“[ ]”结构中会报错,
|| 操作符 如果前面的表达式条件成立,不会去管,不成立就会输出
二、if语句
1.单分支结构
基本格式
if 条件测试操作
then 命令序列
fi
2.双分支结构
格式
if 条件测试操作
then 命令序列1
else 命令序列2
fi
若条件成立,则执行then后面的命令,忽略else,直到fi结束
若条件不成立,则忽略then,跳至else后面的命令序列执行,直到fi结束
3.多分支结构
格式
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi
例:
使用多分支编写需求
每章学完会默写本章学习的知识点,每个阶段学习结束后会有阶段测试,默写和测试不合格者会有相应惩罚
惩罚规则如下:
90-100 错题 抄 10
80-89 错题 抄 20
60-79 错题 抄 30
60以下 全抄 30
例2:
输入一个月份,判断是一年中的第几季度
fi嵌套循环
三、case语句结构
格式
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
....
*)
默认命令序列
esac
case行尾必须为单词 in ,每一行必须以括号“)”结束
双分号“;;”表示命令序列结束
可以用方括号“[]”表示一个连续的范围;还可以用“|”表示,比如“A|B”
最后的“)*”表示默认模式,如果以上取值都不相同,则执行此行
例子:每章学完会默写本章学习的知识点,每个阶段学习结束后会有阶段测试,默写和测试不合格者会有相应惩罚
惩罚规则如下:
90-100 错题 抄 10
80-89 错题 抄 20
60-79 错题 抄 30
60以下 全抄 30
#!/bin/bash
read -p "请输入你的分数:" gy
case $gy in
9[0-9]|100)
echo "错题抄10遍"
;;
8[0-9])
echo "错题抄20遍"
;;
6[0-9]|7[0-9])
echo "错题抄30遍"
;;
*)
echo "全部抄30遍"
esac
总结
- 条件测试的语法
文件测试、整数值比较、字符串比较、逻辑测试 - if条件语句的语法
单分支、双分支、多分支 - case多分支语句的语法
shell脚本的使用方法多种多样,我们要学会灵活去使用它,不能死记硬背,