最近,我们让跳跃式主机与我们所有的设备进行交互。它是红色的,有6.x,我们没有根访问权限。我们可以脚本上的Autoexpect和bash只-没有可能的模块。
资料来源:我有5000台设备(每行1台,每个位置都有3个参数-- HostName IP --它们是分开的)。
任务:搜索每个位置的所有设备(假设out 5000,40为一个位置),将输出重定向到临时文件(没有输出,回显关闭),并为临时目录中的每个设备运行一个命令。输出应该用于HostName ARGV2而不是IP。
假设在tmp中ping每个设备并返回每个主机的成功,或者登录到每个设备,运行命令,输出主机的结果,然后移动到tmp文件中的下一个设备。
输入文件结构示例:
AA Torp1 1.1.1.1
AA Torp2 2.2.2.2
BB Torp97 9.9.9.9假设你想要平每个设备从本地AA。如何将cat hosts.txt | grep AA脚本编写为tmp,然后再ping每个IP,例如1.1.1.1和2.2.2.2,输出如下:
Torp1确定如果ping成功Torp2 NOK如果ping不确定
这是....or对基于位置、ssh、运行命令打印输出、然后删除tmp文件的每个IP的基本示例。
发布于 2019-06-07 16:08:19
这样做的简单方法是使用while read循环。一般格式如下:
while read var1 var2 ... varN; do something; done < inputFile默认情况下,每个输入行都在空格上拆分,因此这基本上就是您所需要的:
while read location hostname ip; do
printf "Ping of $hostname ($ip): "
ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED"
done < ips.txt或者,仅限于某一特定地点:
grep location ips.txt | while read location hostname ip; do
printf "Ping of $hostname ($ip): "
ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED"
done如果我们用这个文件来测试这个:
location1 example.com 93.184.216.34
location2 google.com 8.8.8.8
location1 bad.com 123.456.7.8我们得到:
$ grep -w "^$location" ips.txt |
while read location hostname ip; do
printf "Ping of $hostname ($ip): ";
ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED";
done
Ping of example.com (93.184.216.34): OK
Ping of bad.com (123.456.7.8): FAILEDhttps://unix.stackexchange.com/questions/523573
复制相似问题