更改 bash 脚本中退出代码的定义

Change definition of exit codes in bash script

我正在尝试 运行 一个简单的 bash 脚本,该脚本检查连接到 Linux 机器的卷上的可用 space,然后发送结果如果超过特定阈值,则输出任何体积。这背后的想法是监控各种服务器,以便我们在卷变满时收到通知。

我们想使用的机制是 Jenkins,所以我们需要的是一个我们可以每分钟左右 运行 的工作,并且如果任何量超过 80%,该工作就会失败。

我目前正在使用这样的脚本:

df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ if ( +0 > 80 ) print  " "  }' | while read output;
do
  echo $output
  usep=$(echo $output | awk '{ print }' | cut -d'%' -f1  )
  partition=$(echo $output | awk '{ print  }' )
done

此脚本成功生成了我需要的输出:

83% /dev/xvda1
92% /dev/xvdb

但这就是我卡住的地方。经过大量讨论后,我得出结论,如果有任何输出,我最好的选择是导致失败——正如预期的那样,如果我将阈值提高到 95(例如),输出为空。但是,我想不出一种方法来告诉 Jenkins 这是失败的定义,因为退出状态当然是 0,Jenkins 正确地将其解释为成功。

我能否更改此设置,以便此命令在 没有输出 时退出状态为 0,在有 任何输出时退出状态为失败 ?我认为这将使我能够做我想做的事。

将输出保存到临时变量。如果它有大小,则退出并输入 return 代码。

此外,删除无关的 grep。您已经在使用 awk.

flag=0
while read output
do flag=1
   echo "$output"
done < <( df -H | awk '
 /^Filesystem|tmpfs|cdrom/ { next; }
 { if ( +0 > 50 ) print  " "  }'
)
exit $flag

更好,在更聪明的人的帮助下 -

df -H | awk '
 /^Filesystem|tmpfs|cdrom/ { next; }
 { if ( +0 > 80 ) print  " " ; exit 1; }'