我要使用sar命令监视磁盘IO,需求在输出中 1)如果任何磁盘的%busy超过80%,磁盘名称和如果所有磁盘都低于阈值,那么值应显示在第1行,然后输出应该只显示'ok' 2)如果%busy超过60%但是低于80%的任何磁盘,磁盘名称和如果所有磁盘都低于阈值,则值应显示在第2行,然后输出应显示“ok”
我已经准备好了下面的脚本,但它无法正常显示1个磁盘的某些磁盘未找到错误,只显示'ok'
你可以帮我修改我的剧本并帮助我实现目标
这是我的脚本
`bash-3.00$ cat diskio.sh
#!/bin/bash
a=`sar -d 2 2 |sed -n '/Average/,$ {s/Average//g;p;}'`
e=`$a|awk 'NR> 1{ if ($2 >80) { print $1, $2; f=1; } }
END { if (!f) print "ok" }'`
w=`$a|awk 'NR> 1{ if ($2 <80 && $2 >60) { print $1, $2; f=1; } }
END { if (!f) print "ok" }'`
echo $e
echo $w`
以下是输出
`bash-3.00$ diskio.sh
./diskio.sh: line 3: hdisk18: command not found.
./diskio.sh: line 4: hdisk18: command not found.
ok
ok`
TIA 问候, tnt5273
答案 0 :(得分:3)
您应该使用括号$(code)
而不是后退抽搐和echo
或<<<
来获取变量:
e=$(awk 'NR>1 {if ($2>40) {print $1,$2; f=1}} END {if (!f) print "ok"}' <<<"a$")
e=$(echo "$a" | awk 'NR>1 {if ($2>40) {print $1,$2; f=1}} END {if (!f) print "ok"}')
并且总是在变量周围使用双引号:echo $a
错误,echo "$a"
确定
答案 1 :(得分:2)
您应该在echo
之前的$a
添加以下两行:
e=`$a|awk 'NR> 1{ if ($2 >40) { print $1, $2; f=1; } }
END { if (!f) print "ok" }'`
w=`$a|awk 'NR> 1{ if ($2 <40 && $2 >20) { print $1, $2; f=1; } }
END { if (!f) print "ok" }'`
这样他们看起来像这样:
e=`echo $a|awk 'NR> 1{ if ($2 >40) { print $1, $2; f=1; } }
END { if (!f) print "ok" }'`
w=`echo $a|awk 'NR> 1{ if ($2 <40 && $2 >20) { print $1, $2; f=1; } }
END { if (!f) print "ok" }'`
目前,您只有$a
以hdisk18
开头,bash
将其作为命令互相交配,而您想要做的是回显$a
中的值并将其传递给awk
。