gpt4 book ai didi

linux - 为在 grep 中找到的每个 IP 执行 Shell 脚本

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:06 30 4
gpt4 key购买 nike

我目前正在编写将通过 SNMP 监控我们的接入点的脚本。问题是,如何为在 grep 命令中找到的每个 AP IP 执行我的 snmp 命令。我有一个包含 IP 的文本文件:

O55 172.22.168.3
O55 172.22.168.8
O55 172.22.168.5
O55 172.22.168.6
O55 172.22.168.4
O55 172.22.168.7
546 172.22.98.3
546 172.22.98.4
546 172.22.98.5
546 172.22.98.6
546 172.22.98.7
546 172.22.98.8
546 172.22.98.54

现在我使用此命令仅查找特定 ID,对于此示例,我正在查找“O55”。

grep "O55" O55.txt | awk '{print $2}' | sort

那么结果将只显示在“O55”行中找到的那些 IP。

172.22.168.3
172.22.168.4
172.22.168.5
172.22.168.6
172.22.168.7
172.22.168.8

现在我的问题是,如何为找到的每个 IP 执行我的 snmpwalk 命令?谁能告诉我如何启动命令?这些命令是我仅针对一个给定 ip 用于 snmpwalk 命令的命令,我只是不知道如何为找到的多个 IP 启动命令。

snmpwalk -v2c -c Canopy 172.22.168.3 1.3.6.1.4.1.161.19.3.3.1.1
snmpwalk -v2c -c Canopy 172.22.168.3 1.3.6.1.4.1.161.19.3.1.3.3

总结一下,我想要的结果是这样的,

输入BTSID ==> O55
然后运行脚本,在O55.txt

中找到O55
O55 172.22.168.3
O55 172.22.168.8
O55 172.22.168.5
O55 172.22.168.6
O55 172.22.168.4
O55 172.22.168.7

然后运行snmpwalk命令,但是snmpwalk的每一行都有一个对应的变量,例子是:

OID_A=snmpwalk -v2c -c Canopy "each_IP_of_O55"1.3.6.1.4.1.161.19.3.3.1.1OID_B=snmpwalk -v2c -c Canopy“each_IP_of_O55”1.3.6.1.4.1.161.19.3.3.1.9OID_C=snmpwalk -v2c -c Canopy "each_IP_of_O55"1.3.6.1.4.1.161.19.3.1.4.1.49

那么最后的结果会是这样的:

echo "${OID_A} || ${OID_B} || ${OID_C}"

结果示例如下:

172.22.168.3   ||   CANOPY 11.0.2 AP-DES   ||   Receiving Sync
172.22.168.8 || CANOPY 11.0.2 AP-DES || Receiving Sync
172.22.168.5 || CANOPY 11.0.2 AP-DES || Receiving Sync
172.22.168.6 || CANOPY 11.0.2 AP-DES || Receiving Sync
172.22.168.4 || CANOPY 11.0.2 AP-DES || Receiving Sync
172.22.168.7 || CANOPY 11.0.2 AP-DES || Receiving Sync

非常感谢任何帮助。谢谢。 :)

谢谢你们的帮助,我设法制作了一个脚本,结果正是我想要的。感谢您的建议和意见。这是我制作的脚本的一部分

 #!/bin/bash  
BTSID="$1"
SNMPWALK='/usr/bin/snmpwalk'
SNMPOID='1.3.6.1.4.1.161.19.3'

echo "Query Time: `date "+%m/%d/%Y %H:%M:%S"`"
APIP=`grep ${BTSID} -i O55.txt | awk '{print $2}'`
for EACH in `echo ${APIP}`
do
SWVersion=`$SNMPWALK -v2c -c Canopy ${EACH} ${SNMPOID}.3.1.1 | awk '{print $4" "$5" "$6}' | sed 's/"//g'`
Sync=`$SNMPWALK -v2c -c Canopy ${EACH} ${SNMPOID}.1.3.3 | awk '{print $4" "$5}' | sed 's/"//g'`
Linkspeed=`$SNMPWALK -v2c -c Canopy ${EACH} ${SNMPOID}.3.1.9 | awk '{print $4" "$5" "$6}' | sed 's/"//g'`

echo "${EACH} || ${SWVersion} || ${Sync} || ${Linkspeed} || ${Confsrc}:${confsrc_v}

正如 William Pursell 所说,“不要通过管道将 grep 传递给 awk”,但此脚本会产生我需要的结果。如果您对如何使用 grep 管道 awk 改进该部分有任何建议,我们将不胜感激。谢谢。 :)

最佳答案

我不熟悉 SNMP,但是 bash read 在 while 循环中与 process substitution 一起调用应该能够做到这一点。此外,您应该能够丢失 命令并让如下所示处理过滤

while IFS= read -r ip_addr; do
snmpwalk -v2c -c Canopy "${ip_addr}" 1.3.6.1.4.1.161.19.3.3.1.1
snmpwalk -v2c -c Canopy "${ip_addr}" 1.3.6.1.4.1.161.19.3.1.3.3
done < <(awk '/055/ {print $2}' O55.txt | sort)

关于linux - 为在 grep 中找到的每个 IP 执行 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20026290/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com