Проверьте возвращаемое значение команды в операторе if bash - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть простой скрипт, который пытается свернуть URL-адрес и вывести строку, если она не удалась или удалась. Но я получаю следующие предупреждения, в зависимости от того, как я формирую это выражение if.

В зависимости от кавычек, которые я использую в приведенном ниже утверждении, я получаю следующие предупреждения:

: -ne: unary operator expected
: integer expression expected

С альтернативой проверьте (как комментарий), я получаю следующую ошибку

((: != 0 : syntax error: operand expected (error token is "!= 0 ")

Сценарий:

c=`curl -s -m 10 https://example.com` || ce=$?

#if (( ${je} != 0 )); then 
if [ ${ce} -ne 0 ]; then 
        echo "Failed"
else
        echo "Succeeded"
fi

Как правильно проверить возвращаемое значение команды curl в bash выражении if?

1 Ответ

2 голосов
/ 09 февраля 2020

Проблема в том, что вы устанавливаете статус выхода только при сбое команды curl. Если команда выполнена успешно, переменная ce не установлена ​​(и также не заключена в кавычки), и тест выполняет if [ -ne 0 ]; then и печатает сообщение об ошибке. Использование только одной переменной в этом случае не поможет, вы просто получите другое сообщение об ошибке.

Чтобы исправить это, установите переменную ce после команды curl независимо от состояния выхода команды curl. is:

c=$(curl -s -m 10 https://example.com)
ce=$?
if [ "$ce" -ne 0 ]; then 
  echo "Failed"
else
  echo "Succeeded"
fi

или короче без переменной состояния выхода:

c=$(curl -s -m 10 https://example.com)
if [ $? -ne 0 ]; then 
  echo "Failed"
else
  echo "Succeeded"
fi
...