Forum Programmation.shell Simple question de logique ?

Posté par . Licence CC by-sa.
Tags :
1
13
fév.
2020

Bonjour ou bonsoir à toutes et à tous.

Voila je n'ai pas vraiment de problème mais plutôt une simple question.

J'aimerais savoir pourquoi lorsque j’exécute se code :

#!/bin/bash

a=1

while [ $a = 1 ]
        do
        read -p "Choisir parmi la pierre => P, la feuille => F et le ciseaux => C " choixJ
                case "$choixJ" in
                P ) choixJ='P'
                        a=0
                ;;
                F ) choixJ='F'
                        a=0
                ;;
                C ) choixJ='C' #Pourquoi choixJ ne peut pas être égale à P ? Pourquoi je 
                               #ne peut pas utiliser choixJ ?
                        a=0
                ;;
                * ) echo "Mauvais Choix"
                esac

        done

J'ai en sortie :

Sortie :

Choisir parmi la pierre => P, la feuille => F et le ciseaux => C P
./beta-v2-j-vs-pc.sh: ligne 11: P=P : commande introuvable
Le pc a choisi => C
égalité

Bien sur pour régler le problème j'ai modifié le code comme ceci :

#!/bin/bash

a=1


while [ $a = 1 ]
        do
        read -p "Choisir parmis la pierre => P, la feuille => F et le cisaux => C " choixJ
                case "$choixJ" in
                P ) choixJL='P'
                        a=0
                ;;
                F ) choixJL='F'
                        a=0
                ;;
                C ) choixJL='C' 
                        a=0
                ;;
                * ) echo "Mauvais Choix"
                esac

        done

Voila j’espère que ma question est claire/compressible :)

Bonne soirée a vous tous !! •ᴗ•

  • # parce que...

    Posté par . Évalué à 3 (+1/-0). Dernière modification le 13/02/20 à 20:25.

    tu demandes au jouer de choisir une lettre (P F C)
    tu stockes le résultat dans choixJ

    puis tu testes choixJ (la ligne case)
    pour affecter la valeur du choix du joueur à choixJ

    ton programme pourrait être simplifié

    # iChoix pour le choix interactif
    read -p "faites votre choix parmi P F V" iChoix
    
    case $iChoix in
      P|F|C)
         choixJoueur=$iChoix
         a=0
      ;;
      *)
         echo "mauvais choix"
      ;;
    esac
    • [^] # Re: parce que...

      Posté par . Évalué à 1 (+0/-0).

      Merci pour l'explication et au passage merci pour la simplification !
      Je comprends mieux maintenant.

  • # ?

    Posté par . Évalué à 0 (+0/-1).

    Hello,

    Tu demandes si ta question est compréhensible mais je ne vois même pas pointer le début d'un point d'interrogation ;-)

    Je penses que tu devrais mieux décrire ce que tu attends et reformuler ta question :-)

    Julien_c'est_bien (y'a pas que Seb)

  • # le code ne correspond pas l'exécution

    Posté par . Évalué à 2 (+1/-0). Dernière modification le 13/02/20 à 21:52.

    Je ne reproduis pas l'erreur.
    Et ton code ne correspond pas à ton exécution.
    Tu n'as pas donné le code qui permet de produire l'erreur.

    • [^] # Re: le code ne correspond pas l'exécution

      Posté par . Évalué à 1 (+0/-0). Dernière modification le 14/02/20 à 09:15.

      Re Bonjour;

      Voici le code mais je viens de le re tester et je n'ai plus l'erreur.. 🤨

      #!/bin/bash
      
      
      #choix Joueur
      
      a=1
      
      
      
      while [ $a = 1 ]
      do
      read -p "Choisir parmis la pierre => P, la feuille => F et le cisaux => C " choixJ
      case "$choixJ" in
          P ) choixJ='P'
              a=0
          ;;
          F ) choixJ='F'
              a=0
          ;;
          C ) choixJ='C' 
              a=0
          ;;
          * ) echo "Mauvais Choix"
      esac
      
      done
      
      
      # Choix PC
      
      choixPC=$(( $RANDOM % 3 + 1 ))
      
      
      
      case "$choixPC" in
          1 ) choixPCL='P'
          ;;
          2 ) choixPCL='F'
          ;;
          3 ) choixPCL='C'
          ;;
          * ) echo "erreur "
      esac
      
      
      
      
      
      
      
      
      echo "Le pc a choissi => $choixPCL"
      
      
      
      
      # Resultat
      
      if [ $choixJ = 'P' ] && [ $choixPCL = 'P' ]; then
          echo "egalité"
      elif [ $choixJ = 'P' ] && [ $choixPCL = 'F' ]; then
          echo "Le PC a gagné"
      elif [ $choixJ = 'P' ] && [ $choixPCL = 'C' ]; then
          echo "Le joeur à gagné"
      #///////////////////////////////////////////////////////////////////////
      elif [ $choixJ = 'F' ] && [ $choixPCL = 'P' ]; then
          echo "Le joueur à gagné"
      elif [ $choixJ = 'F' ] && [ $choixPCL = 'F' ]; then
          echo "egalité"
      elif [ $choixJ = 'F' ] && [ $choixPCL = 'C' ]; then
          echo "Le PC a gagné"
      #///////////////////////////////////////////////////////////////////////
      elif [ $choixJ = 'C' ] && [ $choixPCL = 'P' ]; then
          echo "le pc à gagné"
      elif [ $choixJ = 'C' ] && [ $choixPCL = 'F' ]; then
          echo "le joueur à gagné"
      else
          echo "egalité"
      fi
      • [^] # Re: le code ne correspond pas l'exécution

        Posté par (page perso) . Évalué à 5 (+2/-0).

        Des outils pour l'amélioration du code :

        • Grammalecte te signalera différentes fautes de français
        • Shellcheck te signalera deux points concernant le code
      • [^] # Re: le code ne correspond pas l'exécution

        Posté par . Évalué à 2 (+1/-0).

        Salut,

        Je ne comprends pas l'intérêt de ton 1er case…esac et de réaffecter la variable "$choixJ", puisque celle-ci contient déjà la bonne valeur ;-\

        Tu as juste besoin de changer la valeur de la variable $a avec un test unique (P|F|C)…

      • [^] # Re: le code ne correspond pas l'exécution

        Posté par (page perso) . Évalué à 4 (+2/-0).

        Je prends juste ce bout de code et je suppose que le joueur entre P :

        read -p "Choisir parmis la pierre => P, la feuille => F et le cisaux => C " choixJ
        case "$choixJ" in
            P ) choixJ='P'

        À la première ligne (read -p), la variable $choixJ reçoit donc la valeur "P" ;
        La troisième ligne peut se lire : Si $choixJ = "P", alors $choixJ reçoit la valeur "P" !!!!!

        Là est l'illogisme dans ton script.

        « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.