shell脚本-条件测试、

一.条件测试

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  fdfd 文件描述符是否在某终端已经打开
-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

④ 判断成绩

  • 37
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值