Comparar números en shell

0

Pregunta

Tener problemas de comparación de 2 códigos de respuesta en la concha. Ejecución de rizo y la necesidad de validar si la respuesta es de entre 200 y 400. También, hay una posibilidad de respuesta a ser "000" cuando un servidor está caído.

#!/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 : error de sintaxis en la expresión (símbolo de error es "400 || 200 -lt 200 || 000 -ge 400 || 000 -lt 200 ")

Si puedo cambiar los soportes a la [[...]] siempre devuelve true. Si me cambio -lt a < y -ge a >= obteniendo el siguiente error:

((: 200 = 400 || 200 < 200 || 000 = 400 || 000 < 200 : intento de cesión para no variable (símbolo de error es "= 400 || 200 < 200 || 000 = 400 || 000 < 200 ")

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

Mejor respuesta

3

Operador incorrecto. Forma correcta de escribir es:

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

No hay necesidad para desreferenciar explícitamente con $, als mientras se asegura de que sus variables contienen sólo números enteros.

2021-11-23 14:23:27

((: response1 400 || response1 < 200 || response2 400 || response2 < 200 : error de sintaxis en la expresión (símbolo de error es "400 || response1 < 200 || response2 400 || response2 < 200 ")
Mykyta Shvets

¿Qué se obtiene cuando usted hace una echo $BASH_VERSION justo en frente de la if declaración?
user1934428

@MykytaShvets De la mensaje de error, le falta la > operador en el response1 > 400 y response2 > 400 partes de la expresión.
Gordon Davisson

Gracias, después de que se ejecuta en ambiente diferente con adecuada bash versión - esto funciona
Mykyta Shvets
1

Por favor, pruebe con:

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

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................