Назад | Перейти на главную страницу

Что проверяет этот конкретный оператор сценария оболочки?

Я не очень хорошо разбираюсь в Shell Script. Может ли кто-нибудь помочь мне понять и объяснить утверждение [ ! -z ${TRUE:-} ] && [ ${TRUE:-} == 'true' ] &&из следующего фрагмента. Что делает и / или проверяется это конкретное утверждение?

Однако я могу понять это утверждение: TRUE=$($JBOSS_TWIDDLE get jboss.system:type=Server Started |grep Started |cut -d"=" -f2). Это в основном вызов инструмента командной строки JMX JBoss для проверки статуса запуска сервера.

Фрагмент кода:

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
}

При использовании двойных кавычек нет необходимости в сложных мерах предосторожности против того, чтобы $ TRUE было пустым.

[ "$TRUE" = 'true' ]

-Z проверяет, не является ли $ TRUE пустым, и: - ничего не заменяет, если оно не установлено. Все это не нужно. Возможно, это протест против чрезмерно предписывающего стандарта кодирования.

Как отмечают @ drew-khoury и @ramruma, [ -z ... тест лишний.

С помощью TRUE поскольку имя переменной только добавляет путаницы.

Фактический вопрос, на который пытается ответить фрагмент: сделал ли twiddle.sh Распечатать Started=true? Или, говоря в оболочке:

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

В grep ... | read construct вернет true, если grep был успешным, при удалении вывода.

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