LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > 脚本编程 >

Linux expect交互式登陆服务器查看磁盘使用的脚本

时间:2013-06-06 16:32来源:myfreelinux.com 编辑:admin 点击:
磁盘容量使用情况的 脚本 经过一段时间的使用后,再次做出了修改。 两个shell文件名也作了修改。分别为diskInfoChuri.sh和getDiskInfo.sh,这样名字更加符合shell的功能。 在diskInfoChuri.sh 脚本
磁盘容量使用情况的脚本经过一段时间的使用后,再次做出了修改。
两个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

------分隔线----------------------------
标签:expectlinux
栏目列表
推荐内容