#!/bin/bash
#Capacity compare 90%, insert into mysql email
#IP集合
ipList="10.0.0.1 10.0.0.2"
#邮件服务器地址
machine="http://10.0.0.40:8080/jt-mail-client/receive?"
#邮件发送时间
sendtime="`date +%Y%m%d%H%M%S`"
#参数(其他参数)
parameter1="to=dyt@mc2.cn&sender=system&re=0&time=$sendtime"
#IP(主机的IP地址,cut -d表示以冒号分割, -f表示取分割好后的第二列,head -n表示取第几行)
#parameter4="`/sbin/ifconfig | grep 'inet addr' | cut -f 2 -d ':' | cut -f 1 -d ' ' | head -n 1`"
#参数(内容,在一串命令中,有``符号的会先执行)
#parameter2="&body=主机名:`hostname`,IP:$parameter4,磁盘使用空间超过90%25"
#参数(主题)
parameter3="&subject=磁盘使用空间超过90%25"
#32随机数生成(sed 主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作)
randomId="`cat /proc/sys/kernel/random/uuid | sed 's/\-//g'`"
#变量(判断是否所有的分区都正常)
for _IP in $ipList
do
isoutpace=0(判断单个IP是否有发送邮件)
isSend=`cat /data/shell/$_IP.txt`(标记一个IP的某个磁盘超过百分之90时,是否发送过了邮件)
#执行结果中大于2行,就显示第五列数据,将数据导入到/tmp/_disk.tmp中
ssh root@$_IP df -kP | grep -vE "none|devfs" |awk '{if(NR>=2) print int($5)}'>/tmp/_disk.tmp
#循环没个分区判断百分比有大于90的就访问邮件服务器,插入mysql数据库中一条数据
for _DISK in `cat /tmp/_disk.tmp`
do
if [ "$_DISK" -ge "90" ]
then
isoutpace=1(说明已经有一个IP对应的某个磁盘已经超出百分之90了)
if [ $isSend -eq 0 ](判断某个IP的某个分区超出范围时,是否有发送过邮件)
then
parameter2="&body=主机名:`ssh root@$_IP hostname`,IP:$_IP,磁盘使用空间超过90%25"
echo 1 > /data/shell/$_IP.txt(标记一个IP中的某个磁盘超出范围,需要发送邮件的同时,标记为以发送,不需要重复发送)
curl $machine -d "$parameter1" -d "$parameter2" -d "$parameter3" (curl -d表示此参数为post提交)
break;
else
break;
fi
fi
done
if [ $isoutpace -eq 0 ](一个IP的所有磁盘都没有超过就将此文件中的标志位还原为0)
then
echo 0 > /data/shell/$_IP.txt
fi
done
以上内容需要安装Linux免密码登陆
Shell是将我们输入的命令(应用程序例如:man chmod chown)与Kernel沟通的,我们的shell种类存放在/etc/shells
/bin/bash (就是 Linux 预讴癿 shell)
/bin/ksh (Kornshell 由 AT&T Bell lab. 収展出杢癿,兼容亍 bash) 当执行crontab的时候,用的就是这个环境
type可以判断某个指令是外部指令还是bash内部指令,type ls, 找到外部指令在 /bin/ls, type cd, cd is a shell builtin,所以cd 是 shell 内建指令
当正确登入Linux之后,这个时候就有一个bash的执行程序,这时经由bash来跟系统沟通,同时还会获得一些环境变量,运用echo这个指令来取用变量,前面加上【$】
或者是以${变量}
双引号内的特殊字符如$ ,可以正常输出变量的值,而单引号内的特殊字符仅为一般的纯文本输出
在一串指令中,还需要藉由其他的指令提供的信息,可以使用反单引号【`】或【$()】,
若要使该变量能够在其他子程序中使用,则需要以export来将变量变成环境变量,unset用来取消变量的设定,反斜杠用来跳脱特殊字符
exit用来离开子程序,回到父程序,一般来说,父程序的自定义变量无法在子程序中使用,但是透过export将变量变成环境变量后,就能够在子程序底下使用了。
`uname -r`或$(uname -r)获取版本,在一串指令中``符号之内的会先被执行,ls -l `locate crontab` 先以 locate 将文件名数据都列出来,再以 ls 指令来处理
使用env与export来查询默认的环境变量,
env : 列出目前的 shell 环境下的所有环境变量与其内容
利用 declare 宣告数值类型 declare -i number=$RANDOM*10/32768 ; echo $number
set : 观察所有变量 含环境变量与自定义变量
echo $$ 列出当前shell的PID, ?号用来接收上一个指令执行结果的回传值,成功的话返回0,其余为错误,例如echo $?
export: 自定义变量转成环境变量,当你登入Linux后取得一个bash之后,这就是一个独立的程序,再在这个环境中执行bash会衍生出一个子程序,因为子程序不会继承父
程序的自定义变量,如果使用export将自定义变量转成环境变量后,子程序就可以使用了,在一个脚本中定义一个export变量,那么他所衍生出的子程序就能使用这个变量了
这非常实用亍 shell script 当中,被 export 后的变量,我们可以称他为『环境变量』,
变量键盘读取、数组与宣告: read, array, declare
read -p "Please keyin your name: " -t 30 named , -t等待的秒数,-p接提示字符
declare [-aixr] variable, -a定义数组类型,-i整数类型,-x与export一样,将后面的内容变成环境变量,-r将变量设定为readonly,不能更改,也不能unset
var[1]="small min" 数组的赋值,输出结果 echo "${var[1]}, ${var[2]}, ${var[3]}"
变量的删除:${变量#关键词} ,从头开始的数据符合『关键词』,则将符合的最短数据删除
${变量##关键词} 长
${变量%关键词} ,从尾向前的数据符合『关键词』,则将符合的最短数据删除
长
${变量/旧字符串/新字符串} 从头开始,第一个符合的替换为新字符
${变量//旧字符串/新字符串} 全部的旧字符会被替换为新字符
变量的测试与内容替换,username=${username-root} 表示如果username不存在则给予后面的内容root
username=${username:-root}表示如果username为空或者未设定则给予后面的内容root
var=${str=newvar} 如果str不存在,则var和str都为newvar,存在的话,就都设置为str对应的内容
unset str; var=${str?无此参数} 命令行会输出无此参数的提示,若 str 存在时,则 var 的内容会与 str 相同
/etc/profile:这是系统整体的设定,你最好不要修改这个档案;
~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属亍使用者个人设定,你要改自己的数据,就写入这里!
bash 的login shell 情况下所读取癿整体环境配置文件其实叧有 /etc/profile,/etc/profile 还会呼叫出其他的配置文件,所以让我们的 bash 操作接口变的非常的友善
~/.bash_profile 或 ~/.bash_login 或 ~/.profile:这三个文件只有咱login shell的时候才会读取,设定只会读取上面三个档案的其中一个,读取顺序就是这样的顺序
source :读入环境配置文件的指令,利用 source 或小数点 (.) 都可以将配置文件的内容读取到目前的 shell 环境中,
命令执行的判断依据: ; , &&, ||
cmd1 && cmd2 1. 若 cmd1 执行完毕且正确执行($?=0),则开始执行 cmd2。
2. 若 cmd1 执行完毕且为错误 ($?≠0),则 cmd2 不执行。
cmd1 || cmd2 1. 若 cmd1 执行完毕且正确执行($?=0),则 cmd2 不执行。
2. 若 cmd1 执行完毕且为错误 ($?≠0),则开始执行 cmd2。
sort -n 使用纯数字进行排序 -r :反向排序;-t :分隔符,预设是用 [tab] 键来分隔;
Linux中的免密码登陆:client执行ssh-keygen -t rsa生成公私钥,将公钥发送给以后要登陆的服务器端 scp /root/.ssh/id_rsa.pubroot@192.168.8.126:/tmp
服务器运行过ssh命令后,会在用户的目录下有个.ssh的目录,在这个目录下创建一个authorized_keys的文件,将文件设置为400权限 chmod 400 authorized_keys
将客户端传来的公钥导入到这个文件中 cat /tmp/id_rsa.pub >>authorized_keys,最后将客户端传来的公钥删除,此时当客户端登入服务器端时就无需输入密码了