歡迎您光臨本站 註冊首頁

expect如何取遠程主機上某個文件的內容

←手機掃碼閱讀     火星人 @ 2014-03-03 , reply:0

expect如何取遠程主機上某個文件的內容

大家好,我寫了一個腳本來檢測網卡速率的變化,如果與原來速率不一樣,發出告警,現在將腳本粘貼如下:
1、主腳本:
#!/bin/bash
net_log_dir="/home/iaasmonitor/net_monitor/net_log"
cd /home/iaasmonitor/net_monitor
rm -f speed_err.txt drop_err.txt mail_speed.txt mail_drop.txt
grep -v \^# host_ip.txt > .host_vt.txt
for i in `cat .host_vt.txt`
do
ip=`echo $i|cut -f1 -d":"`
ssh_port=`echo $i|cut -f2 -d":"`
hostname=`echo $i|cut -f3 -d":"`
ssh_user=`echo $i|cut -f4 -d":"`
ssh_pwd=`echo $i|cut -f5 -d":"`
root_pwd=`echo $i|cut -f8 -d ":"`
export cmdfile="get_netinfo.txt"
speed_err=`./net_expect.sh $ip $ssh_port $ssh_user $ssh_pwd $root_pwd $cmdfile`
echo "`date "+%Y-%m-%d %k:%M:%S"` $hostname $ip $speed_err">>/home/iaasmonitor/net_monitor/net_log/`date "+%Y%m%d"`_speed_err.txt
echo "`date "+%Y-%m-%d %k:%M:%S"` $hostname  $ip  $speed_err" >>speed_err.txt

2、獲取網卡速率變化信息的腳本(get_netinfo.txt)
#!/bin/sh
cd /tmp
rm -rf speed_err.txt
if [ ! -f net_speed.txt ]; then
sed 's/:/ /' /proc/net/dev|awk '{print $1}'|sed '1,2d'|egrep -v "lo|sit0|bond0|vir" > net_device.txt
for i in `cat net_device.txt`
do
speed=`ethtool $i|grep 'Speed'|sed -e 's/^.*\ //g'`
echo "$i:$speed">>net_speed.txt
done
fi
for i in `cat net_speed.txt`
do
dev=`echo $i|cut -f1  -d":"`
old_speed=`echo $i|cut -f2  -d":"`
new_speed=`ethtool $dev|grep 'Speed'|sed -e 's/^.*\ //g'`
if [ "$old_speed" != "$new_speed" ]; then
echo "$dev $old_speed become $new_speed">>speed_err.txt
fi
done
cat  speed_err.txt -------這樣寫獲取到監控主機上面的信息有expect驗證與登錄主機一系列的過程
3、net_expect.sh腳本:
#!/usr/bin/expect -f
set timeout 50
set ip
set ssh_port
set ssh_user
set ssh_pwd
set root_pwd
set cmdfile [ open [ lindex $argv 5] ]
spawn ssh -p $ssh_port -l $ssh_user $ip
expect {
     "yes/no)?\ " {send "yes\r";exp_continue}
     "*assword:\ " {send "$ssh_pwd\r"}
}
expect "*]$\ " {send "su - root\r"}
expect "*assword:\ " {send "$root_pwd\r"}
expect "*]#\ " {
      while { >=0} {
      send "$cmd\r"
      }
}
expect "*]#\ " {send "exit\r"}
expect "*]$\ " {send "exit\r"}
close $cmdfile
expect eof
4、host_ip.txt的信息如下:
格式形式:
IP地址:ssh埠:主機名稱:普通用戶:密碼:百分比:業務:root密碼
如:
192.168.1.5:22:test-CACHE01:support:support:null:test:123456

腳本上述,可以將網卡的變化情況在被監控主機192.168.1.5上面採集下來,放在/tmp/speed_err.txt文件中,我想將這個文件裡面的信息cat出來放到監控主機某個文件下面,但是在獲取在獲取網卡速率變化信息的腳本get_netinfo.txt中增加最後一行,獲取一些無用的信息,有沒有辦法簡單地只取出我需要的只是速率變化的情況出來?

[火星人 ] expect如何取遠程主機上某個文件的內容已經有364次圍觀

http://coctec.com/docs/service/show-post-369.html