两个shell文件名也作了修改。分别为diskInfoChuri.sh和getDiskInfo.sh,这样名字更加符合shell的功能。 在diskInfoChuri.sh脚本中,对信息处理的共通部分进行了提取,作为一个共通函数。 输出的信息也稍有变化。 getDiskInfo.sh脚本的处理方法没有改变,还是以前的样子,只是脚本名字改了下,更能描述脚本的功能。 以下是两个脚本的内容: diskInfoChuri.sh #!/bin/bash #!/bin/bash #!/usr/bin/expect -f date #打出开始时间 TODAY_DATE=`date ‘+%Y%m%d’` user1=”oracle” user2=”svnroot” password1=”oracle” password2=”svnroot” host1=192.168.1.102 host2=192.168.1.101 hostName1=”oracle服务器” hostName1=”SVN服务器” #取得工作目录 WORK_PATH=”$(cd $(dirname $0);pwd)” #WORK_PATH=”$(dirname $WORK_PATH)” LOG_FILE=”${WORK_PATH}/diskInfo_${TODAY_DATE}.log” LOG_FILE_CHURI=”${WORK_PATH}/diskInfo_CHURI.log” TMP_FILE1=”${WORK_PATH}/tmp1.log” TMP_FILE2=”${WORK_PATH}/tmp2.log” if [ -e ${LOG_FILE} ]; then rm ${LOG_FILE} fi #1:如果磁盘的容量有大于80%的,将服务器的名字写到mail.log中 #2:已经写进去了,就不再写了 serverLog=1 churi() { printServerLog=1 #下面的sed ‘s/\r/\n/g’是将dos格式的回车换成unix格式的换行,如果没有这个处理,就会报错。 #有时候Filesystem的长度>20时,本应该在一行的信息,显示到了两行,所以awk要做特殊处理. cat ${1} | egrep -v “^$|spawn|apl|Filesystem” |sed ‘s/\r/\n/g’|awk ‘{if(NF==1){str=$1;}else if(NF==5){print str” “$0;} else if(NF==6){print $0}}’>${2} while read LINE do PERC=`echo $LINE | awk ‘{print $5}’| sed ‘s:%::g’` if [[ "$?" != "0" ]] ; then echo “在文件${4}中存在错误,请核实” |tee -a ${3} fi FILE=`echo $LINE | awk ‘{print $6}’` if [[ "$?" != "0" ]] ; then echo “在文件${4}中存在错误,请核实” |tee -a ${3} fi LENGTH=`echo $LINE | awk ‘{print length($1)}’` if [[ "${5}" == "1" ]] || [[ "${5}" == "2" ]]; then if [[ "${PERC}" -ge 80 ]]; then if [[ "$printServerLog" -eq 1 ]]; then echo “${4}” >> ${3} echo “Filesystem Size Used Avail Use% Mounted on”>> ${3} printServerLog=2 fi #这里之所以判断这个长度,使因为有时候Filesystem的长度>20时,本应该在一行的信息,显示到了两行,所以要做特殊处理. if [[ "${LENGTH}" -gt "20" ]];then echo “$LINE” |awk ‘{print $1}’>> ${3} echo “$LINE” |awk ‘{print “ “$2″ “$3″ “$4″ “$5″ “$6}’>> ${3} else echo “$LINE” >> ${3} fi fi fi done<${2} } expect getDiskInfo.sh $user1 $host1 $password1 > ${TMP_FILE1} echo ${hostName1} cat ${TMP_FILE1} cat ${TMP_FILE1} > ${LOG_FILE} #churi ${TMP_FILE1} ${TMP_FILE2} ${LOG_FILE_CHURI} ${hostName1} 1 #第2台主机名称 expect getDiskInfo.sh $user2 $host2 $password2 > ${TMP_FILE1} echo ${hostName2} cat ${TMP_FILE1} |tee -a ${LOG_FILE} churi ${TMP_FILE1} ${TMP_FILE2} ${LOG_FILE_CHURI} ${hostName2} 2 if [[ -f ${LOG_FILE_CHURI} ]]; then echo “硬盘检查有不合格的” echo “不合格信息如下” echo “=======================================================================” cat ${LOG_FILE_CHURI} echo “=======================================================================” echo “” rm ${LOG_FILE_CHURI} else echo “硬盘检查OK” echo “请再目视检查一遍” echo “” fi echo “shell脚本处理完成” echo “” rm ${TMP_FILE1} rm ${TMP_FILE2} getDiskInfo.sh #!/usr/bin/expect -f #!/bin/bash set timeout 2 set user [lindex $argv 0] set host [lindex $argv 1] set password [lindex $argv 2] spawn /usr/bin/ssh $user@$host “df -h” expect { password: { expect password: send “$password\r” exp_continue } incorrect { send_user “invalid password or account\n” exit } timeout { send_user “connection to $host timed out\n” exit } eof { send_user “\n” exit } } send “sleep 120\r\n” interact 使用上面的代码时,要将双引号和单引号换成英文的双引号和单引号,否则拷贝下来直接使用会报错. 转载请保留固定链接: https://linuxeye.com/program/1724.html |