Comparer des nombres dans le shell

0

La question

Vous rencontrez des problèmes pour comparer 2 codes de réponse dans un shell. L'exécution de roulage et de la nécessité de valider si la réponse est entre 200 et 400. Aussi, il ya une chance de réponse à "000" lorsqu'un serveur est down.

#!/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 : erreur de syntaxe dans l'expression (jeton d'erreur est "400 || 200 -lt 200 || 000 -ge 400 || 000 -lt 200 ")

Si je change les supports à l' [[...]] il retourne toujours true. Si je change d'-lt pour < et -ge à >= à obtenir l'erreur suivante:

((: 200 = 400 || 200 < 200 || 000 = 400 || 000 < 200 : tentative de cession à des non-variable (jeton d'erreur est "= 400 || 200 < 200 || 000 = 400 || 000 < 200 ")

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

La meilleure réponse

3

Opérateur incorrect. Bonne façon d'écrire est:

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

Pas besoin explicitement de déréférencement avec $, als longtemps qu'il est assuré que vos variables contiennent uniquement des nombres entiers.

2021-11-23 14:23:27

((: response1 400 || response1 < 200 || response2 400 || response2 < 200 : erreur de syntaxe dans l'expression (jeton d'erreur est "400 || response1 < 200 || response2 400 || response2 < 200 ")
Mykyta Shvets

Qu'obtenez-vous lorsque vous faites un echo $BASH_VERSION juste en face de la if déclaration?
user1934428

@MykytaShvets le message D'erreur, il vous manque de l' > opérateur dans le response1 > 400 et response2 > 400 les parties de l'expression.
Gordon Davisson

Merci, après l'exécution dans l'environnement différent avec appropriée bash version - cela fonctionne
Mykyta Shvets
1

Veuillez essayer avec:

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

Dans d'autres langues

Cette page est dans d'autres langues

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