利用df -h | grep ^/dev/ 获得磁盘情况
如果ip 是本机(1.1.1.1)就不通过ssh连接,否则ssh 公钥连接
配置ssh 无密码连接 首先把本机的公钥复制到远程主机用户的.ssh/authorized_keys。配置/etc/ssh/sshd_config ,
取消下面两行注释
RSAAuthentication yes
PubkeyAuthentication yes
重启ssh
systemctl restart sshd
获得磁盘使用率
pusg=`echo $line | egrep -o "[0-9]+%"`
像“87%”形式,去掉百分号,要判断是否大于80 ,大于就报警
pusg=${pusg/\%/}; if [ $pusg -lt 80 ]; then echo SAFE else echo ALERT fi
然后写入$logfile
( for ip in $IP_LIST; do if [ $ip=="1.1.1.1" ]; then df -h | grep ^/dev/ >/tmp/$$.df else ssh testing@$ip 'df -h' | grep ^/dev/ >/tmp/$$.df fi while read line; do cur_date=`date +%D` printf "%-8s %-14s" $cur_date $ip echo $line | awk '{printf("%-9s %-8s %-6s %-6s %-8s",$1,$2,$3,$4,$5);}' pusg=`echo $line | egrep -o "[0-9]+%"` pusg=${pusg/\%/}; if [ $pusg -lt 80 ]; then echo SAFE else echo ALERT fi done < /tmp/$$.df done ) >> $logfile
如果不存在disklogusage`date +%F`.log 文件就创建
${logfile:="diskusage`date +%F`.log"} 表示如果logfile 变量unset 或者null ,就赋值成disklogusage`date +%F`.log,否则不做改变,一般而言,与null有关,若不带:
, null不受影响; 若带 :
, 则连null值也受影响 。变量有三种状态 unset ,null,not-null
if [ ! -e ${logfile:="disklogusage`date +%F`.log"} ];
{} 和()有何区别?
先说一下,为何要用 () 或者 {} 好了。
许多时候,我们在 shell 操作上,需要在 一定的条件下执行多个命令,也就是说, 要么不执行,要么就全执行,而不是每次 依序的判断是否要执行下一个命令。
或者,要从一些命令执行的先后次序中得到结果, 如算术运算的 2*(3+4) 那样...
这时候,我们就可以引入 "命令群组
"(command group
) 的概念:将许多命令集中处理。
在 shell command line
中,一般人或许不太计较()
与 {}
这两对符号的差异,虽然两者都可以将多个命令当作群组处理, 但若从技术细节上,却是很不一样的:
()
将command group
置于sub-shell(子shell)
中去执行,也称nested sub-shell
。{}
则是在同一个shell
内完成,也称non-named command group
。
exec 执行命令会把父进程干掉,fork 生成子程序执行,然后返回到父程序,source 直接在当前程序执行