因此,我正在编写一个脚本,以从预先存在的脚本中获取特定的输出部分,并通过HTTP POST发送它们。
我需要以以下格式发送它们:blade.$hostname.cpu=$cpuvalue
和blade.$hostname.mem=$memvalue
,其中$hostname, $cpuvalue and $memvalue
是前面提到的脚本的输出。
我尝试了以下方法:
#!/bin/bash
for n in {10..11}
do
name=`./getdata.v7 $1 $2 | grep LINX"$n" | cut -c1-6`
cpu=`./getdata.v7 $1 $2 | grep LINX"$n"_processor-usage | cut -c24-25`
mem=`./getdata.v7 $1 $2 | grep LINX"$n"_memory-usage | cut -c21-22`
echo -e "blade.$name.cpu=$cpu\nblade.$name.mem=$mem"
done
但当我运行脚本时,得到的结果是:
刀片.linx10
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
linx10.cpu=2
刀片.linx10
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
LINX10型
linx10.mem=96
有谁能帮我改变一下,我只需要换一次linx10部件,而不是36次(是的,我数过了)?
我写的东西可能有一个非常愚蠢的错误,但我是个新手,不管我怎么努力,我都无法让它发挥作用。
最佳答案
首先,我只给./getdata.v7
打一次电话:
data=$(./getdata.v7 "$1" "$2")
然后我会手动写出
10 11
,因为您真的不需要对两个单词进行大括号扩展:for n in 10 11; do
然后,我只想要grep的第一个匹配,因为它似乎在多行上匹配
LINX$n
。name=$(fgrep "LINX$n" <<< "$data" | head -n 1 | cut -c1-6)
cpu=$(fgrep "LINX${n}_processor-usage" <<< "$data" | head -n 1 | cut -c24-25)
mem=$(fgrep "LINX${n}_memory-usage" <<< "$data" | head -n 1 | cut -c21-22)
注意,我使用的是
fgrep
而不是grep
,因为匹配项不需要是正则表达式。整个管道可能可以用一个awk
语句重写,但我们不需要去那里。然后,我将使用
printf
而不是echo
来提高可读性:printf 'blade.%s.cpu=%s\n' "$name" "$cpu"
printf 'blade.%s.mem=%s\n' "$name" "$mem"