以下脚本用于在网络中删除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)"
任何人都可以帮我搞定吗?
答案 0 :(得分:1)
为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
答案 1 :(得分:1)
要将一行读入数组,请使用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
答案 2 :(得分:0)
您可以使用awk
echo "192.2.165.1 ttcn" | awk ' { split($0,a,"");ip=a[1]; print $ip}'