一.条件测试
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
-
最后的)表示默认模式,其中的 * 相当于通配符