如果条件始终为真,则使用 Bash 脚本

mik*_*b93 4 shell 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!"
...
Run Code Online (Sandbox Code Playgroud)

当我在顶部没有 if 语句的情况下执行此脚本时,一切正常。但是我想检查 $4 是否大于 0。这个测试条件总是返回 true,无论我在这个条件中输入什么,它总是导致“停机,退出”。

所以即使if [ "hello" = "hallo" ]它也会进去然后马上退出。我还尝试了几乎所有带引号的变体,不带,双括号......等等。我显然做错了什么。有人能看出来吗?

提前致谢!

Tim*_*tin 8

要测试整数,您将需要使用:

-eq  #Is equal
-ne  #Is not equal
-lt  #Less than
-le  #Less than or equal
-gt  #Greater than
-ge  #Greater than or equal
Run Code Online (Sandbox Code Playgroud)

所以你的test声明应该是:

if  [ "$4" -gt 0 ];
Run Code Online (Sandbox Code Playgroud)

此外,您的if声明缺少,then因此应更正为:

if  [ "$4" -gt 0 ]; then
Run Code Online (Sandbox Code Playgroud)

查看man test更多test选项。