Confrontare i numeri in shell

0

Domanda

Avendo problemi di confronto 2 codici di risposta in guscio. L'esecuzione di curl e necessario verificare se la risposta è tra i 200 e i 400. Inoltre, c'è una possibilità di risposta da "000" quando un server è giù.

#!/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 : errore di sintassi nell'espressione (errore token "400 || 200 -lt 200 || 000 -ge 400 || 000 -lt 200 ")

Se cambio le staffe al [[...]] restituisce sempre true. Se io cambio -lt < e -ge a >= ottenendo il seguente errore:

((: 200 = 400 || 200 < 200 || 000 = 400 || 000 < 200 : tentativo di cessione per non variabile (errore token è "= 400 || 200 < 200 || 000 = 400 || 000 < 200 ")

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

Migliore risposta

3

Operatore errato. Corretto modo di scrivere è:

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

Non c'è bisogno di esplicitamente riferimento con $als purché sia garantito che le variabili contengono solo numeri interi.

2021-11-23 14:23:27

((: response1 400 || response1 < 200 || response2 400 || response2 < 200 : errore di sintassi nell'espressione (errore token è "400 || response1 < 200 || response2 400 || response2 < 200 ")
Mykyta Shvets

Che cosa si ottiene quando si fa un echo $BASH_VERSION proprio di fronte al if dichiarazione?
user1934428

@MykytaShvets Da il messaggio di errore, ti manca il > operatore response1 > 400 e response2 > 400 parti di espressione.
Gordon Davisson

Grazie, dopo l'esecuzione in un ambiente diverso con opportune bash versione, funziona
Mykyta Shvets
1

Si prega di provare 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

In altre lingue

Questa pagina è in altre lingue

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