我运行此命令在我的 Cisco 交换机上执行远程 SSH 命令:
ssh myswitch 'show ip arp' > myswitch.txt
正确的输出应该是这样的:
Protocol Address Age (min) Hardware Addr Type Interface
Internet 1.1.1.1.251 0 Incomplete ARPA
Internet 1.1.1.1.252 0 Incomplete ARPA
Internet 1.1.1.1.253 0 Incomplete ARPA
Internet 1.1.1.1.254 0 Incomplete ARPA
或者像这样:
Protocol Address Age (min) Hardware Addr Type Interface
Internet 1.1.1.1.252 0 Incomplete ARPA
Internet 1.1.1.1.253 170 fazh.3e1a.7pxz ARPA Vlan123
Internet 1.1.1.1.254 70 fazh.3e53.ya31 ARPA Vlan123
我添加了第一行(协议、地址...),这是标题行,以了解每列的含义。
输出的最后一行应该是以下两行之一:
Internet 1.1.1.1.254 0 Incomplete ARPA
Internet 1.1.1.1.254 70 fazh.3q53.9l3g ARPA Vlan123
如果输出的最后一行是这样的(仅其中一行,而不是两行),则输出正确,否则输出不正确。
如果不正确,则应再次运行 ssh 命令,直到正确为止。
一些错误输出的示例:
Internet 1.1.1.1
Internet 1.1.1.1.224 70
Internet 1.1.1.1.224 70 fazh.3e53
Internet 1.1.1.1.224 0 Incomp
Internet 1.1.1.1.224 70 fazh.3q53.9l3g ARPA Vlan123 #eventhough it's correct, but it's not the last ip
最后一行的 IP 应为 1.1.1.254 或 1.1.1.253。
如何检查
myswitch.txt
是否满足条件,如果不满足,则再次运行SSH,直到正确为止?
我没有做任何尝试,因为我还不知道应该使用什么命令。
这就是您正在寻找的。一个简单的 .sh 脚本,用于检查 .txt 最后一行中给定的 IP。它可以扩展,但由于正确的IP只有2个,所以不需要检查其他关键字。
#!/bin/bash
TXT="myswitch.txt"
until [[ ${CHECK_LOOP} == "DONE" ]]
do
if tail -1 $TXT | grep -q "1.1.1.1.253" || tail -1 $TXT | grep -q "1.1.1.1.254"; then
echo "IP matched in $TXT"
CHECK_LOOP="DONE"
else
echo "Wrong IP detected in myswitch.txt.. rebooting!"
# Paste your ssh command line here to reboot your switch...
sleep 2
continue
fi
done
CHECK_LOOP=""
echo "Connection check completed!"