Como definir vários valores para a mesma variável no UNIX?

1

Estou tentando ter um script que me dê a saída de várias palavras e variações das palavras. Eu tentei colocar o -o para a variável, citando as palavras, juntando-as. As palavras para cada nome de var são as palavras indicadas que eu quero ter saída para mim. Existe uma maneira de corrigir isso ou cada variável precisa ser definida individualmente? Tal como varname1 = mesmo varname2 = Mesmo varname3 = EVEN, etc.

#!/bin/bash

varname1=even -o Even -o EVEN
varrname2=odd -o Odd -o ODD
varname3=zero -o Zero -o ZERO
varname4=negative -o Negative -o 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" = $varname1 ) || ("$varword" = $varname2 ) || ("$varword" = $varname3 ) || ("$varword" = $varname4 ) ]]
then
    echo "The approved word you have selected is $varword, great work! "
else
    echo "The unapproved word you have selected is $varword, Please try again."
fi
    
por Mister123 29.11.2015 / 00:54

2 respostas

1
echo "Type one of the following words:"
echo "even, odd, zero, negative"
while :; do
  read varword
  varword="${varword,,}" #downcase it
  case "$varword" in
    even|odd|zero|negative)
      echo "The approved word you have selected is $varword, great work! "; break;;
    *)
      echo "The unapproved word you have selected is $varword, Please try again.";;
  esac
done
    
por 29.11.2015 / 01:33
0

Uma maneira de armazenar vários valores em uma variável seria uma matriz. Aqui está uma documentação sobre como usar variáveis de matriz no bash.

No entanto, parece-me que o que você quer é uma correspondência insensível a maiúsculas e minúsculas. Isso pode ser alcançado com grep -iq . i diz ao grep para casar com insensibilidade a maiúsculas e q diz ao grep que ele deve retornar true ou false. Além disso, você pode usar o operador ou \| na cláusula grep para corresponder várias palavras. Finalmente, você usa a notação de herestring < < < < para alimentar a variável diretamente para o grep. Isso simplifica consideravelmente o seu script:

#!/bin/bash

# Ask the user for one of four select words
echo "Type one of the following words:"
echo "even, odd, zero, negative"
read varword
if grep -iq "even\|odd\|zero\|negative" <<< "$varword"
then
    echo "The approved word you have selected is $varword, great work! "
else
    echo "The unapproved word you have selected is $varword, Please try again."
fi
    
por 29.11.2015 / 01:26