Comparar números em shell

0

Pergunta

Tendo problemas de comparação de 2 códigos de resposta shell. Executar o curl e precisa validar se a resposta estiver entre 200 e 400. Além disso, há uma chance da resposta ser "000" quando um servidor está em baixo.

#!/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 : erro de sintaxe na expressão (erro de token é "400 || 200 -lt 200 || 000 -ge 400 || 000 -lt 200 ")

Se eu alterar os suportes para o [[...]] ele sempre retorna true. Se eu mudar -lt para < e -ge a >= recebendo o seguinte erro:

((: 200 = 400 || 200 < 200 || 000 = 400 || 000 < 200 : tentativa de atribuição para não-variável (erro de token é "= 400 || 200 < 200 || 000 = 400 || 000 < 200 ")

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

Melhor resposta

3

Errado operador. Maneira correta de escrever é:

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

Não há necessidade de explicitamente cancelam com $, als desde que se garanta que as variáveis que contêm apenas números inteiros.

2021-11-23 14:23:27

((: response1 400 || response1 < 200 || response2 400 || response2 < 200 : erro de sintaxe na expressão (erro de token é "400 || response1 < 200 || response2 400 || response2 < 200 ")
Mykyta Shvets

O que você ganha quando você fizer um echo $BASH_VERSION em frente a if declaração?
user1934428

@MykytaShvets da mensagem De erro, você está ausente o > operador de response1 > 400 e response2 > 400 partes da expressão.
Gordon Davisson

Obrigado, após a execução em ambiente diferente, com as devidas bash versão - isso funciona
Mykyta Shvets
1

Por favor, tente com:

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

Em outros idiomas

Esta página está em outros idiomas

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