我还没有太多的巴什经验,我正在学习。在工作中,我们需要使用SNMP从无线接入点中提取数据。我的任务是制作一个脚本来遍历几千个访问点。
我通过SNMPWALK通过顺序请求来拉动多个数据字符串。这就是我如何设置我的输入:
IAP=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapName -Oqv)
MODEL=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::arrayModel -Oqv | cut -d ',' -f1)
CHANNEL=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapChannel -Oqv)
MAXHOUR=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsHour -Oqv)
MAXDAY=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsDay -Oqv)
MAXWEEK=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsWeek -Oqv)
MAXMONTH=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsMonth -Oqv)
MAXYEAR=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsYear -Oqv)
MAC=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMacAddress -Oqv)下面是通过echo打印的输入示例
iap1
iap2
iap3
iap4
iap5
iap6
iap7
iap8
XR4820
6
100
11
149
64
112
36
161
9
2
7
2
2
1
3
2
11
5
9
4
8
3
3
3
22
9
21
4
12
4
16
5
24
23
21
5
12
8
20
11
24
23
21
5
12
8
20
11
00:0f:7d:ea:b1:00-01
00:0f:7d:ea:b1:10-11
00:0f:7d:ea:b1:20-21
00:0f:7d:ea:b1:30-31
00:0f:7d:ea:b1:40-41
00:0f:7d:ea:b1:50-51
00:0f:7d:ea:b1:60-61
00:0f:7d:ea:b1:70-71我需要把数据输出到CSV。问题是我得把他们弄得井井有条。模特频道。。.,MODEL1,CHANNEL1 .。.)。我好像做得不好。
我尝试使用IFS,正如堆栈溢出中其他答案所建议的那样。我尝试创建一个for循环,然后迭代元素:
IAP=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapName -Oqv)
if [ "$IAP" != "No Such Instance currently exists at this OID" ]
then
MODEL=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::arrayModel -Oqv | cut -d ',' -f1)
CHANNEL=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapChannel -Oqv)
IFS=' ' read -a CHANNEL <<< "$CHANNEL"
MAXHOUR=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsHour -Oqv)
IFS=' ' read -a MAXHOUR <<< "$MAXHOUR"
MAXDAY=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsDay -Oqv)
IFS=' ' read -a MAXDAY <<< "$MAXDAY"
MAXWEEK=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsWeek -Oqv)
IFS=' ' read -a MAXWEEK <<< "$MAXWEEK"
MAXMONTH=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsMonth -Oqv)
IFS=' ' read -a MAXMONTH <<< "$MAXMONTH"
MAXYEAR=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMaxStationsYear -Oqv)
IFS=' ' read -a MAXYEAR <<< "$MAXYEAR"
MAC=$(snmpwalk -v 2c -c $COMMUNITY $DEVICE XIRRUS-MIB::iapMacAddress -Oqv)
IFS=' ' read -a MAC <<< "$MAC"
for ((i=0; i<${#IAP[@]}; ++i));
do
ia=${IAP[$i]}
m=${MAC[$i]}
c=${CHANNEL[$i]}
h=${MAXHOUR[$i]}
d=${MAXDAY[$i]}
w=${MAXWEEK[$i]}
mon=${MAXMONTH[$i]}
y=${MAXYEAR[$i]}
if [ -n "$m" ]
then
TEMP="$MODEL,$ia,$c,$h,$d,$w,$mon,$y"
if [ $i -gt 1 ]
then
OUTPUT=",$OUTPUT,$TEMP"
else
OUTPUT="$TEMP"
fi
fi
done但是,这是输出:
XR4820,iap1
iap2
iap3
iap4
iap5
iap6
iap7
iap8,11,8,11,11,11,11虽然它应该是:
2,6,9,11,22,24,24,2,100,2,5,9,23,23,iap3,
概述:
我的输入是一些长字符串,我需要解析这些字符串并将元素发送到.CSV文件中。他们需要井然有序.从每个元素中获取元素'0‘,然后从元素'1’获取元素等等。我创建了一个循环,它不工作,但仍然打印一些数据。在我天真的观点中,最好的解决方案是将每个变量转换成一个数组,并按顺序遍历元素。
for循环。如何在维护输出格式的同时简化它?这是一个混乱的多个变化IFS获取数据并将其放置到数组中,那么需要更改什么呢?发布于 2015-01-22 21:41:07
您可以通过var=( $var )创建一个变量(空格分隔)数组,但我没有完全理解您的问题。
如果你编辑了你的帖子,并在文章的结尾总结了你想要的东西,那将是有帮助的。
编辑(基于注释):
在字段被‘\n’分隔的情况下:
var1=`echo $var1 | tr "\n" " "`
var1=( $var1 )https://stackoverflow.com/questions/28098748
复制相似问题