目录
1、条件测试
1.1test测试操作
1.2字符串比较
1.3整数值比较
1.4判断登录用户是否超过两个
1.5文件状态测试
1.6控制操作符
1.7组合多个命令
1.8多条件判断
1.9基础命令
2、监控系统信息
2.1查看当前的时间
2.2查看网卡信息-ip地址
2.3查看剩余内存大小
2.4查看剩余磁盘大小
2.5查看15min的平均负载
2.6查看登录系统的用户数量
2.7查看当前的进程数量
2.8查询到系统信息达到特定条件发送邮件
1、条件测试
shell脚本的智能化
为命令的执行提供最直接的识别依据
- 文件或目录的读/写等状态文件是否可读可写
- 数值的大小内存大于多少或小于多少怎么处理
- 字符串是否匹配不同用户操作不同
- 多条件组合既要判断权限又要判断用户
1.1test测试操作
语法格式:
test 选项 参数
[ 选项 参数 ] 推荐使用这种
help test #查看测试帮助
1.2字符串比较
基本语法
是否为空 [ -z 字符串 ]
等于 [ 字符串1 == 字符串2 ]
不等于 [ 字符串1 != 字符串2 ]
注意:空格不能省略,因为是没有输出的,所以我们需要通过echo语句来判断当前语句的输出:echo $? 如果结果为0则为null,不为0则不为空
如果判断等于和不等于,则0为真,1为假
1.3整数值比较
[ 整数值1 操作符 整数值2 ]
-eq 等于Equal
-ne 不等于Not Equal
-ge 大于等于 Greader or Equal
-le 小于等于 Less or Equal
-gt 大于 Greader Than
-lt 小于 Less Than
1.4判断登录用户是否超过两个
who 查看用户谁在登录,每一行代表一个用户
现在登录的用户有几个
who | wc -l
判断登录用户数是否大于2
因为只有一个,所以小于2,返回1表示假
1.5文件状态测试
[ 操作符 文件或目录 ]
-e 判断对象是否存在(Exist),若存在结果为真
-d 判断对象是否为目录(Directory),若是则为真
-f 判断对象是否为一般文件(file),若是则为真
-r 判断对象是否有可读权限(read),若是则为真
-w 判断对象是否有可写权限(write),若是则为真
-x 判断对象是否有可执行权限(excute),若是则为真
另外查看文件或者目录下的文件的权限,可以使用命令:
ll 文件或目录
1.6控制操作符
; | 命令1 ; 命令2 先命令1再命令2,命令1和命令2之间可以没有关系 |
&& | 命令1 && 命令2 命令1和命令2之间有关系,命令1成功之后再执行命令2 |
|| | 命令1 || 命令2 命令1执行成功则不执行命令2,命令1不成功则执行命令2 |
先进入/etc再列出文件或目录
/etcxxx不存在,所以报错,但是第二个仍然执行
命令1执行成功再执行命令2,命令1不成功则不执行命令2
命令1不成功再执行命令2
1.7组合多个命令
1.8多条件判断
使用&&、||进行多个条件判断
[ 判断1 ] && [ 判断2 ]
[ 判断1 ] || [ 判断2 ]
1.9基础命令
tr -s #删除多余重复的字串
cut #过滤数据
2、监控系统信息
2.1查看当前的时间
首先查看一下自己的虚拟机中不同时间单位的符号是什么
date --help
因此我们就可以通过提示编写以下命令查看当前时间
方法1:直接输入date查看
date
方法2:自己编写命令
time=$(date "+%Y/%m/%d %H:%M:%S")
2.2查看网卡信息-ip地址
ifconfig ens33 | grep netmask | tr -s " " |cut -d " " -f3
2.3查看剩余内存大小
cat /proc/meminfo |grep Avai | tr -s " " | cut -d" " -f2
2.4查看剩余磁盘大小
df | grep "/$" | tr -s " " | cut -d" " -f4
2.5查看15min的平均负载
cat /proc/loadavg #查看所有的负载
第一个是1分钟的平均负载,第二个是五分钟的平均负载,第三个是15分钟的平均负载
所以查看第三个就是
cat /proc/loadavg | cut -d" " -f3
2.6查看登录系统的用户数量
who | wc -l
2.7查看当前的进程数量
ps aux | wc -l
2.8查询到系统信息达到特定条件发送邮件
编写info.sh文件
#!/bin/bash
#本脚本获取系统的个性性能参数指标,并预设阈值进行比较
#time:时间,localip:eth0网卡IP,free_mem:剩余内存大小,free_disk:乘除磁盘大小
#cpu_load:15min平均负载,login_user:登陆系统的用户,procs:当前进程数量
local_time=$(date "+%Y/%m/%d %H:%M:%S")
local_ip=$(ifconfig ens33 | grep netmask | tr -s " " | cut -d" " -f3)
free_mem=$(cat /proc/meminfo |grep Avai | tr -s " " | cut -d" " -f2)
free_disk=$(df | grep "/$" | tr -s " " | cut -d" " -f4)
cpu_load=$(cat /proc/loadavg | cut -d" " -f3)
login_user=$(who | wc -l)
procs=$(ps aux | wc -l)
#当剩余内存不足1GB,发送邮件给root进行报警
[ $free_mem -lt 1048576 ] && echo "$local_tree Free memory not enough. Free_mem:$free_mem on $local_ip " | mail -s Warning root yang
#当剩余磁盘不足10GB发送邮件给root进行报警
[ $free_disk -lt 10485760 ] && echo " $local_tree Free memory not enough. root_free_disk:$free_disk on $local_ip " | mail -s Warning root yang
#当cpu的15min平均负载超过4时发送邮件给root进行报警
result=$(echo "$cpu_load > 4 " | bc )
[ $result -eq 1 ] && echo "$local_time CPU load to high, CPU 15 averageload:$cpu_load on $local_ip " | mail -s Warning root yang
#当系统实时在线人数超过3人时发送邮件给root进行报警
[ $login_user -gt 3 ] && echo "$local_time Too many user. $login _user users login to $local_ip " | mail -s Warning root yang
#当实时进程数量大于300时发送邮件给root进行报警
[ $procs -gt 300 ] && echo "$local_time Too many procs $procs proc are running on $local_ip " | mail -s Waring root yang
然后给文件添加可执行权限
chmod +x info.h
安装mail
sudo apt-get uninstall mailutils
查看mail的版本
sudo postconf mail_version
执行info.sh,并查看邮件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)