这个特定的 shell 脚本语句验证什么?

这个特定的 shell 脚本语句验证什么?

我不是一名优秀的 Shell 脚本专家。有人能帮我理解并解释[ ! -z ${TRUE:-} ] && [ ${TRUE:-} == 'true' ] &&以下代码片段中的语句吗?这个特定语句在做什么和/或被验证什么?

但是,能够理解这句话:TRUE=$($JBOSS_TWIDDLE get jboss.system:type=Server Started |grep Started |cut -d"=" -f2)。这基本上是调用JBoss的JMX命令行工具来检查服务器启动状态。

代码片段:

while [ $i -lt 180 ]; do
        TRUE=$($JBOSS_TWIDDLE get jboss.system:type=Server Started |grep  Started |cut -d"=" -f2)

        [ ! -z ${TRUE:-} ] && [ ${TRUE:-} == 'true' ] && {
    echo "The $JBOSS_NAME server is up and running."
    return
}

答案1

正如@drew-khoury 和@ramruma 指出的那样,这个[ -z ...测试是多余的。

用作TRUE变量名称只会增加混乱。

该代码片段试图回答的实际问题是:twiddle.sh打印了什么Started=true?或者,用 shell 的话说:

jboss_is_started() {
    ($JBOSS_TWIDDLE get jboss.system:type=Server Started |
        grep 'Started=true' | read)
}

如果 grep 成功,构造grep ... | read 将返回 true,同时删除输出。

if jboss_is_started; then
     echo "The $JBOSS_NAME server is up and running."
     return
fi

答案2

如果使用双引号,则不需要精心防范 $TRUE 为空。

[ "$TRUE" = 'true' ]

-z 测试 $TRUE 是否为空,如果未设置,则 :- 不替换任何内容。这一切都是不必要的。也许这是对过度规范的编码标准的抗议。

相关内容