0

我要使用 sar 命令监视磁盘 IO,要求在输出 1) 如果任何磁盘的 %busy 高于 80%,如果所有磁盘都低于阈值,则磁盘名称和值应显示在第一行,然后输出应仅显示 'ok ' 2) 如果任何磁盘的 %busy 高于 60% 但低于 80%,如果所有磁盘都低于阈值,则磁盘名称和值应显示在第二行,则输出应仅显示 '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

4

2 回答 2

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"好的

于 2013-11-14T07:39:51.560 回答
2

您应该在以下两行中添加一个echobefore :$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" }'`

目前,您只有$awhich以.hdisk18bash$aawk

于 2013-11-14T07:28:50.970 回答