Сравните цифры в shell

0

Вопрос

Возникли проблемы при сравнении 2 кодов ответов в оболочке. Запуск curl и необходимо проверить, находится ли ответ между 200 и 400. Кроме того, есть вероятность, что ответ будет "000", когда сервер не работает.

#!/bin/sh
response1="200" #curl first url
response2="000" #curl second url

if (( $response1 -ge 400 || $response1 -lt 200 || $response2 -ge 400 || $response2 -lt 200 )) ; then
  echo "Something went wrong, response code is not in success range"
  exit 1
else
  echo "Success"
  exit 0
fi

((: 200 -ge 400 || 200 -lt 200 || 000 -ge 400 || 000 -lt 200 : синтаксическая ошибка в выражении (маркер ошибки "400 || 200 -lt 200 || 000 -ge 400 || 000 -200 лт ")

Если я изменю скобки на [[ ... ]], он всегда возвращает значение true. Если я изменю-lt на < и -ge на>=, появится следующая ошибка:

((: 200 = 400 || 200 < 200 || 000 = 400 || 000 < 200 : попытка присвоения непеременной (маркер ошибки "= 400 || 200 < 200 || 000 = 400 || 000

bash linux numbers script
2021-11-23 13:18:34
2

Лучший ответ

3

Ошибся оператором. Правильный способ написания-это:

if (( response1 > 400 || response1 < 200 || response2 > 400 || response2 < 200 )) ; then

Нет необходимости явно разыменовывать с $, при условии, что ваши переменные содержат только целые числа.

2021-11-23 14:23:27

((: response1 400 || response1 < 200 || response2 400 || response2 < 200 : синтаксическая ошибка в выражении (маркер ошибки "400 || response1 < 200 || response2 400 || response2 < 200 ")
Mykyta Shvets

Что вы получаете, когда делаете echo $BASH_VERSION как раз напротив if заявление?
user1934428

@MykytaShvets Из сообщения об ошибке следует, что вам не хватает > оператор в response1 > 400 и response2 > 400 части выражения.
Gordon Davisson

Спасибо, после запуска в другой среде с соответствующей версией bash - это работает
Mykyta Shvets
1

Пожалуйста, попробуйте с:

if [ $response1 -ge 400 ] || [ $response1 -lt 200 ] || [ $response2 -ge 400 
 ] || [ $response2 -lt 200 ] ; then
  echo "Something went wrong, response code is not in success range"
  exit 1
else
  echo "Success"
  exit 0
fi
2021-11-23 13:24:09

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

Популярное в этой категории

Популярные вопросы в этой категории