一.条件测试
1.( ) 和 { }
()会进/data ,开启子shell

{ } 直接切过去了,不开子shell

小案例:

2. test 命令
测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为其他数值 。
格式:
test 条件表达式
[ 条件表达式 ] (注意至少应有一个空格)
文件测试常见选项
| 常见操作符 | 含义 |
| -e | 测试目录或文件是否存在 |
| -d | 测试是否为目录 |
| -a | 测试目录或文件是否存在(不推荐) |
| -f | 测试是否为文件 |
| -r | 测试当前用户是否有权限读取 |
| -w | 测试当前用户是否有权限写入 |
| -x | 测试当前用户是否有权限执行 |
| -L | 测试是否为软连接文件 |
| -nt | 判断文件A是否比文件B新 |
| -ot | 判断文件A是否比文件B旧 |
| -ef | 判断两个文件是否为同一文件 |
| -s | 是否存在且非空 |
| -t fd | fd 文件描述符是否在某终端已经打开 |
| -N | 文件自从上一次被读取之后是否被修改过 |
| -O | 当前有效用户是否为文件属主 |
| -G | 当前有效用户是否为文件属组 |

-a 和 -e 推荐使用-e


权限比较特殊,如果我是超级管理员,即使看不到这些权限,我也可以读、写等,以实际为准。
x 执行权限比较特殊

3. 比较整数数值
格式:
[ 整数1 操作符 整数2 ]
常见测试操作符:
| -eq | 第一个数等于(Equal)第二个数 |
| -ne | 第一个数不等于(Not Equal)第二个数 |
| -gt | 第一个数大于(Greater Than)第二个数 |
| -lt | 第一个数小于(Lesser Than)第二个数 |
| -le | 第一个数小于或等于(Lesser or Equal)第二个数 |
| -ge | 第一个数大于或等于(Greater or Equal)第二个数 |
测试磁盘空间是否大于等于80

4. 字符串比较
格式:
[ 字符串1 = 字符串2 ] 是否相同
[ 字符串1 != 字符串2 ] 是否不相同
[ -z 字符串 ] 是否为空
[ -n 字符串 ] 字符是否存在
常见的测试符比较
| = | 字符串内容相同 |
| != | 字符串内容不同,! 号表示相反的意思 |
| -z | 字符串内容为空 |
| -n | 字符是否存在 |
5.逻辑测试
格式:
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
操作符:
| &&或 -a | 逻辑与 而且的意思 |
| || 或 -o | 逻辑或 或者的意思 |
| ! | 逻辑否 |
cmd1 && cmd2 || cmd3
## 如果cmd1成功,执行cmd2,如果cmd2不成功,就执行cmd3
① 使用邮箱发送磁盘过高警告
1.邮箱设置

2.开启pop3 smtp服务(此处会生成一个授权码,这个授权码先保存,后续需要,如果没保存,可以点击下面的生成授权码,发送短信即可生成授权码)

3.修改配置文件
- 邮箱的配置文件为:/etc/mail.rc

4.请求数字认证
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
cd /root/.certs/
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs/./ -i qq.crt
certutil -L -d /root/.certs
5.测试

6.写入脚本
#!/bin/bash
#实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送到自己的QQ邮箱
systemctl stop firewalld #关闭防火墙
yum -y install mailx &>/dev/null #下载邮件安装包
#第一次需要填加,后面不需要
#cat >> /etc/mail.rc <<EOF
#set from=2860596835@qq.com
#set smtp=smtps://smtp.qq.com:465
#set smtp-auth-user=2860596835@qq.com
#set smtp-auth-password=pbluakdnbqdvddfe
#set ssl-verify=ignore
#set smtp-auth=login
#set nss-config-dir=/root/.certs
#EOF
#下面开始进行数字认证
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
cd /root/.certs/
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs/./ -i qq.crt
certutil -L -d /root/.certs
use=`df|tr -s " "|grep sda|cut -d " " -f5|tr -d %`
[ $use -ge 80 ] && echo "磁盘剩余空间不足"|mail -s warning 2860596835@qq.com ||echo "磁盘剩余量足够"
② 左轮手枪

③ 操作


6. 双中括号
[[ ]]
== 左侧字符串是否和右侧的PATTERN相同
注意:此表达式用于[[ ]]中,PATTERN为通配符
=~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
注意: 此表达式用于[[ ]]中,扩展的正则表达式
操作:

二. if 语句
1.单分支结构
格式:
if [ 条件判断式 ]; then
当条件判断成立时,执行一条或多条命令
fi
或者
if [ 条件判断式 ]
then
执行的命令
fi
2.双分支结构
if [ 条件判断式 ]; then
当条件判断成立时,可以执行一条或多条命令
else
当条件判断不成立时,可以执行一条或多条命令
fi
3.多分支结构
if [ 条件判断式一 ]; then
当条件判断成立时,可以执行一条或多条命令
elif [ 条件判断式二 ]; then
当条件判断成立时,可以执行一条或多条命令
elif [ 条件判断式三 ]; then
当条件判断成立时,可以执行一条或多条命令
......
else
当上面的条件判断都不成立时,可以执行一条或多条命令
fi
4.操作
① 看服务是否开启

② 判断操作系统

③ 判断成绩


④ 剪刀石头布


⑤ 鸡兔同笼


三. case 语句
1.语法
格式:
case 变量名称 in
模式1)
命令序列
;;
模式2)
程序段
;;
*)
不包含第一个变量内容与第二个变量内容的其他程序执行段
默认程序段
;;
esac
格式注意:
-
case 行首必须以单词“in”,每一模式必须以单个右括号")"结束
-
双分号 ";;" 表示命令序列的结束
-
模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠 | 表示或,比如 a|b
-
最后的)表示默认模式,其中的 * 相当于通配符
2.操作
① 判断字母还是数字还是特殊字符


② 剪刀石头布



③ 判断输入yes和no


④ 判断成绩






![[BUG] Authentication Error](https://img-blog.csdnimg.cn/direct/a145274518aa41e9a92c02cd79f35425.png)


















