我有一个bash shell,它会记下内存值,告诉我它们是否正常。如果内存良好,它将返回03。在系统中,内存量可能会有所不同,但在一个中我有一组12个模块。 SNMP将作为单个字符串返回:
03 03 03 03 03 03 03 03 03 03 03 03
03表示没问题。 03以外的任何东西都是个问题。在bash中是否有一种简单的方法可以解析通过我猜的是一个空格分隔的列表,如果包含03以外的任何内容返回错误或返回OK?
感谢。
JR
答案 0 :(得分:0)
iVal =`grep“03 03 03 03 03 03 03 03 03 03 03 03”fileName`
如果iVal = 0,你就有了马赫。如果没有,你没有匹配。
请注意,在grep之前和行尾都是严重的重音(后退)。
尝试man grep
和man bash
如果你想要更可配置的东西(不同的长度响应)你可以使用正则表达式更通用,或者你可以使用awk
来解析一定长度的字符串(或变量数)
答案 1 :(得分:0)
您可以使用awk
解决此问题:
awk '{for (i=1;i<=NF;i++) if ($i!="03") print "fail"}' <yourfile>
或类似的东西。基本上,这将遍历记录中的每个字段(一个字段是记录中的一个数字),检查它是否是&#34; 03&#34;如果没有,那么打印&#34;失败&#34;。
答案 2 :(得分:0)
如果值与您的示例一样是以空格分隔的,则默认的$IFS
值将为您分割字符串。所以,你可以这样做:
status_string=$(snmpwalk arg arg arg)
ok=1
for status in $status_string
do
[[ "${status:-}" != "03" ]] && ok=0
done
如果数据在文件中,您只需使用$(</path/to/file)
将文件内容放入内存即可。如果值是换行符分隔,空格分隔或制表符分隔,则此方法可用。或者这些字符的某种组合。
如果"${var:-}"
为空或未定义,$var
表达式将返回空字符串,从而阻止脚本抱怨空变量。我建议任何时候变量都是空的结构(假设一个支持它的shell,它应该是任何常见的bourne风格的shell)。