如果大于等于

如果大于等于

我正在尝试在 redhat Linux 中编写一个 shell 脚本,如果有进程运行超过 2 小时,它将发送一封电子邮件。这是我的脚本。

#!/bin/sh
RESULT=find /proc -maxdepth 1 -user gen17 -type d -mmin +120 | wc -l;
if [ "$RESULT -ge 1" ];
then
find /proc -maxdepth 1 -user gen17 -type d -mmin +120 -exec basename {} \; | mail -s 'process running more than 2 hours' <myemail>
fi
echo "now sleeping for 2 mins"
sleep 120
done

根据我的说法,只有当结果大于或等于 1 时我才应该发送电子邮件,但是,如果该值为零,则会向我发送电子邮件。

答案1

我认为您的代码存在一些问题。首先,如果您希望将命令的输出存储在字符串中,您可以使用$()如下语法将命令括起来:

RESULT=$(find /proc -maxdepth 1 -user gen17 -type d -mmin +120 | wc -l)

接下来,看起来你的if陈述有误。您将整个内容放在引号中,这使得它将其视为字符串(在本例中始终将其视为真实语句)。我想以下内容会起作用:

if [ $RESULT -ge 1 ]

或者也许你正在尝试这样的事情:

if [ "$RESULT" -ge "1" ]

在没有亲自测试的情况下,我想两者都应该在这种情况下工作。

答案2

您的构造是包含值$RESULT和文字文本的单个字符串-ge 1;然后隐式检查零长度。因为字符串长度永远不会为零,所以测试返回 1。

[ "$RESULT -ge 1" ]

我想你需要的是这个

[ "$RESULT" -gt 1 ]

相关内容