Script que pede quatro palavras e diz ao usuário a palavra que escolheu. Erro de saída?

0

Estou trabalhando em um pequeno trabalho de casa que está me pedindo para escrever um script que pede quatro palavras, e um usuário deve digitá-lo exatamente como é eco.

Meu problema é que na minha saída, não está me dando um eco para declarações falsas. Tudo o que eu ponho no meu if é verdade e me dá a primeira declaração de eco aprovada. Existe um problema com a configuração de variáveis ou os colchetes e parênteses? Eu tenho tentado colocá-los em todos os tipos de variações diferentes ao longo da parte if, mas parece que não consigo chutar a saída falsa. Eu também uso o shell check como minha fonte de verificação de sintaxe e está mostrando o script como sendo funcional. Qualquer ajuda seria apreciada, aqui está o que escrevi.

#!/bin/bash
varname1=even
varname2=odd
varname3=zero
varname4=negative

# Ask the user for one of four select words
echo "Type one of the following words:"
echo "even, odd, zero, negative"
read varword
if [[ ("$varword" -eq $varname1 ) || ("$varword" -eq $varname2 ) || ("$varword" -eq $varname3 ) || ("$varword" -eq $varname4 ) ]]
then
    echo "The approved word you have selected is $varword ."
else
    echo "The unapproved word you have selected is $varword . Please try again."
fi
    
por Mister123 28.11.2015 / 22:09

2 respostas

0

Use = para comparações de strings, não -eq .

if [[ ("$varword" = "$varname1" ) || ("$varword" = "$varname2" ) || ("$varword" = "$varname3" ) || ("$varword" = "$varname4" ) ]]

como alternativa, use um regexp:

if [[ $varword =~ ^(even|odd|zero|negative)$ ]] ; then
    
por 28.11.2015 / 22:21
0

Use o bash select builtin

# Ask the user for one of four select words
PS3="Select one of the words: "
select choice in even odd zero negative; do
    [[ -n $choice ]] && break
done
echo "The approved word you have selected is $choice ."
    
por 29.11.2015 / 14:05