条件が常にtrueの場合、Bashスクリプト

条件が常にtrueの場合、Bashスクリプト

アイシング用のイベントハンドラを作成しようとしています。私のBashスクリプトは次のようになります。

#!/bin/bash
# Event Handler for loggin out inactive RDP users

# $1 is $SERVICESTATE$ (OK WARNING UNKNOWN CRITICAL)
# $2 is $SERVICESTATETYPE$ (SOFT HARD)
# $3 is $SERVICEATTEMPT$ (1 through 4)
# $4 is $SERVICDOWNTIME$ (0 no Downtime, >0 Downtime active)
# $5 is SRV29 
# $6 is $host.name$ (1 through 4)


if  [ "$4" > 0 ];
 echo "in downtime, exit";
 then exit
fi

case "$1" in
OK)
echo "ok!"
;;
WARNING)
echo "warning!"
;;
UNKNOWN)
echo "unknown!"
;;
CRITICAL)
echo "critical!"
...

上部にif文なしでこのスクリプトを実行すると、すべてがうまく機能します。しかし、$ 4が0より大きいことを確認したいと思います。このテスト条件は常に true を返し、この条件に何を入力しても常に「停止、終了」の結果が発生します。

だから、if [ "hello" = "hallo" ]すぐに入ってくるでしょう。私は引用符、二重括弧などを使用せずに引用符を使用してほぼすべてのバリエーションを試しました。私は明らかに何かが間違っています。誰でもそれを把握できますか?

よろしくお願いします!

ベストアンサー1

整数をテストするには、次のものを使用する必要があります。

-eq  #Is equal
-ne  #Is not equal
-lt  #Less than
-le  #Less than or equal
-gt  #Greater than
-ge  #Greater than or equal

したがって、test宣言は次のようになります。

if  [ "$4" -gt 0 ];

また、お客様のif声明が欠落しているため、then次のように修正する必要があります。

if  [ "$4" -gt 0 ]; then

man testその他のオプションについては、リソースを参照してくださいtest

おすすめ記事