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

时间:2019-01-03 15:11:58

标签: bash exit-code

我正在尝试运行一个简单的bash脚本,该脚本检查Linux计算机上连接的卷上的可用空间,然后将所有卷的结果发送到输出(如果超过特定阈值)。其背后的想法是监视各种服务器,以便在卷变满时收到通知。

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

此刻我正在使用这样的脚本:

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

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

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

但是这就是我被困住的地方。经过反复思考之后,我得出了最好的选择,那就是如果有任何输出会导致失败-如我所料,如果将阈值提高到95,输出为空。但是,我无法找出一种方法来告诉Jenkins这是失败的定义,因为当然退出状态为0,Jenkins正确地将其解释为意味着成功。

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

1 个答案:

答案 0 :(得分:3)

将输出保存到临时变量。如果尺寸合适,请退出并返回代码。

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

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

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

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