Por que minha condição sempre é avaliada como verdadeira?

1

Estou escrevendo meu primeiro roteiro de bash e acertei um obstáculo. Aqui está um exemplo em que peço um nome, pergunto por uma idade e exibo uma mensagem que muda dependendo se a idade é ou não < = 35:

#!/bin/bash
ageLimit = 34
echo "What is your name?"
read userName
echo "How old are you?"
read userAge
if (( "$userAge" -le "$ageLimit" )); then
    echo "Hey, $userName.  At $userAge years old, you are young."
else
    echo "Gosh, $userName.  At $userAge years old, you're pretty old."
fi

Não importa o número que eu responda para a idade, me disseram que sou jovem. Isso está sendo executado em Raspbian - no caso de isso ajudar. Obrigado!

Jeremy

    
por mrcoulson 11.01.2014 / 05:29

3 respostas

3

Espaços em branco fazem muita diferença no script whell, você precisa cuidar deles. Não há espaço entre o nome da variável e o sinal = e seu valor.

Reescreva seu script de shell da seguinte forma:

#!/bin/bash
ageLimit=34
echo "What is your name?"
read userName
echo "How old are you?"
read userAge
if [[ "$userAge" -le "$ageLimit" ]]; then
    echo "Hey, $userName.  At $userAge years old, you are young."
else
   echo "Gosh, $userName.  At $userAge years old, you're pretty old."
fi

Refira-se a um bom tutorial sobre shell script enquanto você suja as mãos. Um bom tutorial googling retorna é este:

Você também pode querer saber isso:

por jobin 11.01.2014 / 05:40
1

Eu posso ver dois pequenos erros no seu código.

[1] Não use espaço ao declarar variável, faça assim

ageLimit=34

[2] Há duas maneiras de colocar as condições de if , use qualquer uma delas.

if [ "$userAge" -le "$ageLimit" ]; then

ou

if (( "$userAge" <= "$ageLimit" )); then
    
por souravc 11.01.2014 / 05:41
0

se você tentar avaliar duas cadeias de caracteres, use o -le -ge se quiser avaliar o número que eu sugiro que você use o operador convencional > < = é convenção geral e guerras boas. então neste caso use

% bl0ck_qu0te%     
por smn_onrocks 16.01.2014 / 12:10