より大きいか等しい場合

より大きいか等しい場合

プロセスが2時間以上実行されると、Redhat Linuxで電子メールを送信するシェルスクリプトを作成しようとします。これは私のスクリプトです。

#!/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以上の場合にのみEメールを送信する必要がありますが、値が0の場合はEメールを送信します。

答え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 ]

関連情報