下面的脚本用于丢弃邮件,而ping则在网络中丢弃。
subject="Ping failed"
Email="test1@server.abc.com"
awk '{print $1}' < b.txt | while read ip;do
CNT=$(ping -c 1 $ip | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $CNT -eq 0 ]; then
echo "Host : $ip is down (ping failed) at $(date)"| mail -s "$subject" $Email
fi
done这个脚本运行得很好。输入文件有以下内容..
192.2.165.1 ttcn
192.3.4.23 dct
192.3.4.24 abc我希望将这个文件的行划分为0和1索引形式,比如数组和邮件格式应该是
Host : $ip ttcn is down (ping failed) at $(date)"有人能帮我弄到这个吗?
发布于 2014-06-03 13:41:08
要将一行读入数组,请使用read -a arr,然后使用${arr[0]}、${arr[1]}等访问元素。
另外,您不需要解析ping的输出来检查主机是否响应。只需使用退出状态即可。
以下是修订本:
while read -r -a arr
do
ip="${arr[0]}"
if ! ping -q -c 1 "$ip" > /dev/null
then
mail -s "$subject" "$email" <<< "Host $ip is down (ping failed) at $(date)"
fi
done < b.txt发布于 2014-06-03 12:50:09
向read提供多个参数,然后将每一列读入相应的变量:
while read ip name;do
CNT=$(ping -c 1 $ip | awk -F',' '/received/ { split($2, a, " "); print a[1]}')
if [ $CNT -eq 0 ]; then
echo "Host : $ip $name is down (ping failed) at $(date)"| mail -s "$subject" $Email
fi
done < b.txt发布于 2014-06-03 12:50:30
您可以使用awk
echo "192.2.165.1 ttcn" | awk ' { split($0,a,"");ip=a[1]; print $ip}' https://stackoverflow.com/questions/24015191
复制相似问题