IF声明给出误报

时间:2018-02-12 02:44:49

标签: bash shell awk grep

我有一个脚本可以解析日志文件,抓取一个数字,并通过AWK与数字进行比较。如果该数字大于,则应该提供回声以通知我该数字太高。

代码的第一部分包括以下内容:

cat $d | grep send | awk '{print $1}' | awk '$1 > 40.0 {print $0;}' > /dev/null 2>&1

测试为我提供了我想要的正确项目。

下一部分是我的IF声明。编码如下:

if [ "$?" = "0" ]
    then
    host=$(cat $d | grep Host | awk '{print $1}')
    echo "$host has high sending usage!"
else
    echo "--" > /dev/null 2>&1
fi

我的问题是,当我运行这一小部分时,它说两个测试文件都有很高的使用率,我不确定为什么。

 user@server:~/lab/CPU-Util$ ./message.sh
 Host-01 has high sending usage!
 Host-02 has high sending usage!

更新:更新更清晰。

我有两个文件,其中包含以下信息:

 1.1.1.1
 Host-01
 five seconds: 6%/0%; one minute: 3%; five minutes: 3%
 45.58241 Mbps send  usage
 2.1677 Mbps download usage

如果发送使用率高于设定的阈值,40用于测试目的,我希望能够解析它,如果“发送使用”部分高于该值,则给我一条回声消息,如我的IF中所述言。

1 个答案:

答案 0 :(得分:1)

使用if [ "$?" = 0 ],您正在测试上一个命令是否成功。它总是成功,所以测试总是通过。

由于您的许多输出语句被重定向到/ dev / null,因此无法从发布的示例输入生成已发布的预期输出,所发布的脚本无法在给定的情况下运行示例输入(没有你发布的命令所使用的“主机名”),并且没有明显的理由说明你为什么要使用一堆管道命令然后切换到shell等等,但它可能就是这样:

awk '
/Host/ { host=$1 }
/send/ && ($1 > 40) { printf "%s has high sending usage!\n", host }
' "$d"