如何通过某些条件检查文件的有效性

问题描述 投票:0回答:1

我运行此命令在我的 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,直到正确为止?

我没有做任何尝试,因为我还不知道应该使用什么命令。

bash
1个回答
0
投票

这就是您正在寻找的。一个简单的 .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!"
© www.soinside.com 2019 - 2024. All rights reserved.