Precisa escrever um script “thirsty.sh”: BASH [closed]

0

Ok, eu tenho todo o código e está funcionando. Estou apenas com problemas com o while loop

#asking the user if they are "thirsty". 
echo "Are you thirsty?"


#creating thirsty variable
read thirsty


#if user answers 'no'/'No'/'NO'/'n'/'N'.
if [ "$thirsty" == "no" ] || [ "$thisrty" == "No" ] || [ "$thisrty" == "N" ] || [ "$thisrty" == "n" ] || [ "$thisrty" == "NO" ]; then
    echo "Okay, thank you for coming. Have a nice day."
    exit
fi

#if user answers 'yes'/'Yes'/'YES'/'y'/'Y'
while [ "$thirsty" != "yes" ]; do

    if [ "$thirsty" == "yes" ] || [ "$thisrty" == "Yes" ] || [ "$thisrty" == "YES" ] || [ "$thisrty" == "y" ] || [ "$thisrty" == "Y" ]; then
        echo "Okay, what would you like to drink?"
        echo "We have: water, beer, wine, and anything else you can think of."
        read drink
        if [ "$drink" == "water" ]; then
            echo "Clear crisp and refreshing"
        elif [ "$drink" == "beer" ]; then
            echo "Let me see some ID"
        elif [ "$drink" == "wine" ]; then
            echo "One box or two?"
        else 
            echo "Coming right up..."
    fi
fi

done

Eu preciso do loop while para iniciar o script se eles não responderem com um dos "sim" ou um dos "não" ...

    
por Chris Herzog 15.10.2015 / 22:27

3 respostas

2

A primeira coisa que posso ver é que existem vários erros de digitação com a palavra "sede" no seu script, e isso está impedindo que ele funcione corretamente. Pesquise e substitua a palavra "thisrty" pela palavra correta "thirsty".

Além disso, não tenho certeza se você deseja adicionar mais coisas ao seu código mais tarde, mas do jeito que está agora, você poderia simplesmente substituir seu while por um loop infine e remover o "if" que está seguindo para a direita após o tempo, porque a variável "sede" nunca terá seu valor alterado novamente, assim:

#asking the user if they are "thirsty". 
echo "Are you thirsty?"
#creating thirsty variable
read thirsty
#if user answers 'no'/'No'/'NO'/'n'/'N'.
if [ "$thirsty" == "no" ] || [ "$thirsty" == "No" ] || [ "$thirsty" == "N" ] || [ "$thirsty" == "n" ] || [ "$thirsty" == "NO" ]; then
    echo "Okay, thank you for coming. Have a nice day."
    exit
fi

while [ 1 ]; do
    echo "Okay, what would you like to drink?"
    echo "We have: water, beer, wine, and anything else you can think of."
    read drink
    if [ "$drink" == "water" ]; then
        echo "Clear crisp and refreshing"
    elif [ "$drink" == "beer" ]; then
        echo "Let me see some ID"
    elif [ "$drink" == "wine" ]; then
        echo "One box or two?"
    else 
        echo "Coming right up..."
    fi
done
    
por 15.10.2015 / 22:39
1

Você pode alterar seu código para usar uma função para solicitar a entrada do usuário (player?).

is_thirsty() {
  echo """
  Are you thirsty (Yes/No)?'
  """
  while :
  do
    read -p '>' thirsty
    case ${thirsty^^} in
      NO|N)
        return 1
        ;;
      YES|Y)
        return 0
        ;;
      *)
        echo -n '(Yes/No)'
        ;;
    esac
  done
}

Este é um exemplo de uso:

choose_drink() {
  echo """
  Okay, what would you like to drink?
  We have: water, beer, wine and anything else you can think of.
  """
  read -p '>' drink
  case ${drink^^} in
    WATER)
      echo "Clear crisp and refreshing"
      ;;
    BEER)
      echo "Let me see some ID"
      ;;
    WINE)
      echo "One box or two?"
      ;;
    *)
      echo "Coming right up..."
      ;;
  esac
}

goodbye() {
  echo "Okay, thank you for coming. Have a nice day."
}

is_thirsty && choose_drink || goodbye
    
por 15.10.2015 / 23:28
0

Acho que você está procurando por algo assim

# Make thirsty an uppercase variable
typeset -u thirsty

# Initialize thirsty
thirsty="INIT"

while [ "$thirsty" != "YES" || "$thirsty" != "Y" || "$thirsty" != "NO" || "$thirsty" != "N" ]
do

#asking the user if they are "thirsty". 
    echo "Are you thirsty?"


#creating thirsty variable
    read thirsty


#if user answers 'no'/'No'/'NO'/'n'/'N'.
    if [ "$thirsty" == "NO" ] || [ "$thisrty" == "N" ]; then
        echo "Okay, thank you for coming. Have a nice day."
        exit
    fi

#if user answers 'yes'/'Yes'/'YES'/'y'/'Y'
    while [ "$thirsty" != "YES" ]; do

        if [ "$thirsty" == "YES" ] || [ "$thisrty" == "Y" ]; then
            echo "Okay, what would you like to drink?"
            echo "We have: water, beer, wine, and anything else you can think of."
            read drink
            if [ "$drink" == "water" ]; then
                echo "Clear crisp and refreshing"
            elif [ "$drink" == "beer" ]; then
                echo "Let me see some ID"
            elif [ "$drink" == "wine" ]; then
                echo "One box or two?"
            else 
                echo "Coming right up..."
            fi
        fi

    done
done

Tente e me diga o que você pensa.

Espero que isso ajude.

    
por 15.10.2015 / 23:50