アイシング用のイベントハンドラを作成しようとしています。私の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
。