Forum Programmation.shell Multi utilisateurs d'un script

Posté par  .
Étiquettes : aucune
0
12
juin
2005
Bonjour,

Je vous expose mon problème.

Je voudrais pouvoir exécuter le même script sur 2 ordinateurs a la fois, et ce en même temps.
Le problème c'est que lorsque je met une valeur dans une variable, elle n'existe que pour un seul de ces deux ordinateurs.

Comment faire pour que la valeur que je met dans la variable soit reconnue lors de l'exécution simultanée du script?

peut on écrire la liste des variables dans un fichier et faire que le script la lise à chaque moment où il en a besoin?
  • # Le script, il sent fort de la bouche ?

    Posté par  . Évalué à 2.

    Tu as honte de ton script que tu n'oses pas le poster ?
    Ce serait nettement plus simple avec
    • [^] # Re: Le script, il sent fort de la bouche ?

      Posté par  . Évalué à 1.

      bon il est un peu long c'est pour ca que j hésitait ;-)
      j explique un peu.

      C'est un programme d'othello (le jeu, appellé aussi reversi) que j'aimerais etre jouable sur 2 machines à la fois
      il commence à la fonction attente.

      #!/bin/bash
      A1=".";A2=".";A3=".";A4=".";A5="." # etc........... -> H8="."
      tableau()
      {
      echo "-------------------------------------"
      echo "| | A | B | C | D | E | F | G | H |"
      echo "-------------------------------------"
      echo "| 1 | $A1 | $B1 | $C1 | $D1 | $E1 | $F1 | $G1 | $H1 |"
      echo "-------------------------------------"
      echo "| 2 | $A2 | $B2 | $C2 | $D2 | $E2 | $F2 | $G2 | $H2 |"
      echo "-------------------------------------"
      echo "| 3 | $A3 | $B3 | $C3 | $D3 | $E3 | $F3 | $G3 | $H3 |"
      echo "-------------------------------------"
      echo "| 4 | $A4 | $B4 | $C4 | $D4 | $E4 | $F4 | $G4 | $H4 |"
      echo "-------------------------------------"
      echo "| 5 | $A5 | $B5 | $C5 | $D5 | $E5 | $F5 | $G5 | $H5 |"
      echo "-------------------------------------"
      echo "| 6 | $A6 | $B6 | $C6 | $D6 | $E6 | $F6 | $G6 | $H6 |"
      echo "-------------------------------------"
      echo "| 7 | $A7 | $B7 | $C7 | $D7 | $E7 | $F7 | $G7 | $H7 |"
      echo "-------------------------------------"
      echo "| 8 | $A8 | $B8 | $C8 | $D8 | $E8 | $F8 | $G8 | $H8 |"
      echo "-------------------------------------"
      }
      convertisseur()
      {
      # convertit les A1 en 11,...
      }
      converse()
      {
      # converti les 11 en A1
      }
      joue()
      {
      read coul < couleur
      if [ "$coul" = "n" ]
      then
      aff="x"
      paff="O"
      echo b > couleur
      else
      echo n > couleur
      aff="O"
      paff="x"
      fi
      convertisseur
      line=`expr $shoot / 10`
      row=`expr $shoot % 10`
      cased=`expr 8 - $row`
      caseg=`expr $row - 1`
      caseh=`expr $line - 1`
      caseb=`expr 8 - $line`
      if [ $cased -ge $caseh ]
      then casehd=$caseh
      else casehd=$cased
      fi
      if [ $cased -ge $caseb ]
      then casebd=$caseb
      else casebd=$cased
      fi
      if [ $caseg -ge $caseb ]
      then casebg=$caseb
      else casebg=$caseg
      fi
      if [ $caseg -ge $caseh ]
      then casehg=$caseh
      else casehg=$caseg
      fi
      echo $cased #débug
      echo $paff #débug
      flag=0
      i=1
      shoot3=$shoot
      while [ $i -le $cased ] #retourne les cases à droite
      do
      point=`expr $shoot + $i`
      conv=$point
      converse
      if [ "$( eval echo $conv )"=="$paff" ]
      then
      flag=`expr $flag + 1`
      else
      if [ $( eval echo $conv )==. ]
      then
      break
      else
      if [ $( eval echo $conv )==$aff && $flag -ge 1 ]
      then
      j=1
      while [ $j -lt $flag ]
      do
      shoot3=`expr $shoot3 + 1`
      conv=$shoot3
      converse
      eval "$conv=$aff"
      done
      fi
      fi
      fi
      i=`expr $i + 1`
      done
      eval "$shoot2=$aff"
      clear
      tableau
      sleep 3
      echo l>who
      sleep 2
      suite
      }

      attente()
      {
      E4=x
      E5=O
      D4=O
      D5=x
      clear
      echo "Attente de l'autre joueur"
      i=0
      read var2 < file
      if [ "$var2" = "r" ]
      then
      echo b>who
      echo rg > file
      coul="b"
      echo b > couleur
      pascoul="n"
      echo "vous etes blanc - vos pions sont [O]"
      sleep 2
      suite
      else
      echo r > file
      while i=0
      do
      sleep 3
      echo "attente"
      read joueur < file
      if [ "$joueur" = "rg" ]
      then
      echo "vous etes noir - vos pions sont [x]"
      break
      fi
      done
      suite
      fi
      }



      tir()
      {
      clear
      tableau
      echo w > who
      echo "Où voulez vous jouer? Ecrivez en majuscule (exemple: X4)"
      read shoot
      if [ "$shoot" = "q" ]
      then
      exit 0
      else
      shoot2=$shoot
      eval "$shoot=$shoot2"
      joue
      fi
      }

      suite ()
      {
      read var1<who
      if [ "$var1" = "$coul" ]
      then
      echo w >who
      tir
      else

      echo "Attendez que l'autre joueur finisse"
      i=0
      while i=0
      do
      sleep 1
      read attent<who
      echo $attent
      if [ "$attent" = "l" ]
      then
      echo good
      tir
      fi
      done
      fi
      }
      attente
      • [^] # Re: Le script, il sent fort de la bouche ?

        Posté par  . Évalué à 1.

        Si je comprends bien, tu veux faire du réseau avec du shell script ... Pour cela, il existe un programme appelé netpipes, que tu trouveras à cette adresse :

        http://web.purplefrog.com/~thoth/netpipes/ftp/(...)

        Je ne sais pas dans quelle mesure il existe des packages pour les différentes distributions. Pour debian, ça a l'air d'exister pour unstable, <troll> c'est à dire celle qui devrait sortir en 2008</troll>.

        Mais bon, le shell script c'est pas terrible pour faire du réseau, c'est même pas terrible pour la programmation tout court dès que ça devient un peu trop compliqué. En ce qui me concerne, je n'arrive jamais à me souvenir comment faire ne serait-ce que deux if imbriqués ou même une comparaison numérique, autant dire que je suis très admiratif que tu sois déjà arrivé jusqu'ici. Donc si ce n'est pas pour un exercice de style (après tout il y a bien un fou qui a réussi à implémenter sokoban en ... sed), je te conseille de passer à un langage de programmation plus adapté : perl, tcl, python, ruby, lisp, pour ne rester qu'aux langages interprétés : tu as le choix. Ils ont tous des supports réseaux, soit intégrés directement dans le langage, soit sous forme de module. Tu verras que tu souffriras beaucoup moins ...
        • [^] # Re: Le script, il sent fort de la bouche ?

          Posté par  . Évalué à 1.

          le hic c'est pas que je veux faire ce script en shell mais que je dois le faire ;-)

          Je suis completement d accord que c'est un peu ridicule de demander de faire ca mais c est un projet de cours !!!
          le shell script c est tres cool pour faire de l administration mais c est sur que quand il s agit de faire un jeu, c est une autre histoire, enfin....

          si toutefois quelqu un pouvait m aider !!!!!
          merci tonton
          • [^] # Re: Le script, il sent fort de la bouche ?

            Posté par  . Évalué à 1.

            OK, je comprends. Est-ce que tu peux nous donner exactement le sujet de ton exercice ?

            A quoi tu as droit et à quoi tu n'as pas droit. Parce que c'est clair qu'avec du shell tout seul, tu n'arriveras jamais à partager des données entre deux machines.

            Tu peux utiliser soit netpipes déjà mentionné, soit un shell distant (ssh, rsh, rlogin, rexec), soit ftp ou le mail.

            Et n'oublie pas que multi-utilisateurs ça veut pas dire forcément plusieurs machines, on est sous UNIX qui est multi-utilisateurs depuis 1970.
            • [^] # Re: Le script, il sent fort de la bouche ?

              Posté par  . Évalué à 1.

              En fait le truc c est qu il faut l'écrire en bash mais il doit être lançable a partir de deux machines, par ssh par exemple, connectées sur le même compte distant.

              Le problème est donc que lorsque l'un des deux joueurs exécute ce script, les variables qu'il utilise sont locales à sa session. Donc l'autre joueur n'y a pas accès et vu que j'ai eu le malheur de ne pas y penser dès le début, j'ai mis dans des variables les cases du tableau dans lesquelles les joueurs jouent. Du coup quand l'un joue il ne voit pas les coups de l'adversaire.
              C'est pour ça que j'espere trouver un moyen de transformer le script, par exemple en mettant dans un fichier la liste de variable utilisées, mais je ne sais pas comment faire pour que le script principal y accede et considere le contenu de ce fichier comme ses propres variables..
              • [^] # Re: Le script, il sent fort de la bouche ?

                Posté par  . Évalué à 1.

                Ah bah ça c'est facile. Tu peux par exemple faire quelque chose comme

                > echo > fichier.tmp << EOF
                > VAR1=var1
                > VAR2=var2
                > EOF

                Pour l'écrire, et

                > . fichier.tmp

                pour le lire, et après tu peux accéder aux valeurs de VAR1 et VAR2 depuis ton shell. En théorie, il faut un truc pour locker le fichier (tu peux utiliser un fichier fichier.lck, par exemple) pour être sûr que l'un n'est pas en train de lire/écrire en même temps que l'autre.

                En outre, il faudrait faire gaffe à la sécurité, parce que l'autre pourrait mettre des trucs méchants (genre "rm -rf $HOME/" dans fichier.tmp au pire, ou au mieux bidouiller les données de l'autre). Mais bon le fait de partager un même compte n'est pas terrible pour la sécurité de toute façon...
                • [^] # Re: Le script, il sent fort de la bouche ?

                  Posté par  . Évalué à 1.

                  ouais mais ca c pour y acceder a partir du shell, moi le truc qu il me faudrait c'est que le shell principal "othello" ecrive un fichier "variables" dans lequel il cherche les variables dont il a besoin.

                  si "othello" veut ecrire dans la variable "A1" il ecrit "A1=23" > dans le fichier "variables" et qu ensuite quand il a besoin de savoir ce qu il y a dans la variable "A1", il execute le fichier "variables" pour la lire.

                  ainsi au début de l execution du script:

                  A1=".";A2=".";.........;H8="."
                  puis au fur et a mesure que les joueurs jouent on passe à Xn="O" ou Xn="x" selon qui joue.

                  Je pense que le fait d ecrire les variables dans un fichier séparé et lire ce fichier a chaque besoin d acces aux variables est le seul moyen pour que chacun des joueurs puisse disposer des memes variables en meme temps.
    • [^] # Re: Le script, il sent fort de la bouche ?

      Posté par  . Évalué à 1.

      salut est il possible de nous donner le code tt entier
      (code des fonctions ........................................)
      j'en ai vraiment besoin



      aboulouayacine@hotmail.com
      merci
      • [^] # Re: Le script, il sent fort de la bouche ?

        Posté par  . Évalué à 1.

        Pour ceux que ca interresse
        Le code entier qui fonctionne (presqe)
        il faut lancer le script dans 2 sessions pour qu'il fonctionne

        #!/bin/bash
        # Othello 2005
        #
        # ordre du script:
        #
        # attente
        # suite
        # tir
        # tableau
        # joue
        # convertisseur
        # convere
        # suite
        # .
        # .
        # .
        #
        #
        #

        echo "**************************************"
        echo "** **"
        echo "** O T H E L L O **"
        echo "** **"
        echo "**************************************"
        echo ""
        echo ""
        echo "Appuyez sur pour continuer"
        read startttt
        echo ""
        echo ""
        # placement de "." dans les variables du "tableau"
        echo "." >A1;echo "." >A2;echo "." >A3;echo "." >A4;echo "." >A5;echo "." >A6;echo "." >A7;echo "." >A8;echo "." >B1;echo "." >B2;echo "." >B3;echo "." >B4;echo "." >B5;echo "." >B6;echo "." >B7;echo "." >B8;echo "." >C1;echo "." >C2;echo "." >C3;echo "." >C4;echo "." >C5;echo "." >C6;echo "." >C7;echo "." >C8;echo "." >D1;echo "." >D2;echo "." >D3;echo "." >D4;echo "." >D5;echo "." >D6;echo "." >D7;echo "." >D8;echo "." >E1;echo "." >E2;echo "." >E3;echo "." >E4;echo "." >E5;echo "." >E6;echo "." >E7;echo "." >E8;echo "." >F1;echo "." >F2;echo "." >F3;echo "." >F4;echo "." >F5;echo "." >F6;echo "." >F7;echo "." >F8;echo "." >G1;echo "." >G2;echo "." >G3;echo "." >G4;echo "." >G5;echo "." >G6;echo "." >G7;echo "." >G8;echo "." >H1;echo "." >H2;echo "." >H3;echo "." >H4;echo "." >H5;echo "." >H6;echo "." >H7;echo "." >H8


        tableau() # fonction qui trace le tableau
        { # on lit dans chaque fichier Xn sa valeur pour la placer dans le tableau
        read A1 <A1;read B1 <B1;read C1 <C1;read D1 <D1;read E1 <E1;read F1 <F1;read G1 <G1;read H1 <H1;read A2 <A2;read B2 <B2;read C2 <C2;read D2 <D2;read E2 <E2;read F2 <F2;read G2 <G2;read H2 <H2;read A3 <A3;read B3 <B3;read C3 <C3;read D3 <D3;read E3 <E3;read F3 <F3;read G3 <G3;read H3 <H3;read A4 <A4;read B4 <B4;read C4 <C4;read D4 <D4;read E4 <E4;read F4 <F4;read G4 <G4;read H4 <H4;read A5 <A5;read B5 <B5;read C5 <C5;read D5 <D5;read E5 <E5;read F5 <F5;read G5 <G5;read H5 <H5;read A6 <A6;read B6 <B6;read C6 <C6;read D6 <D6;read E6 <E6;read F6 <F6;read G6 <G6;read H6 <H6;read A7 <A7;read B7 <B7;read C7 <C7;read D7 <D7;read E7 <E7;read F7 <F7;read G7 <G7;read H7 <H7;read A8 <A8;read B8 <B8;read C8 <C8;read D8 <D8;read E8 <E8;read F8 <F8;read G8 <G8;read H8 <H8;

        # tableau a base d echo
        echo "-------------------------------------"
        echo "| | A | B | C | D | E | F | G | H |"
        echo "-------------------------------------"
        echo "| 1 | $A1 | $B1 | $C1 | $D1 | $E1 | $F1 | $G1 | $H1 |"
        echo "-------------------------------------"
        echo "| 2 | $A2 | $B2 | $C2 | $D2 | $E2 | $F2 | $G2 | $H2 |"
        echo "-------------------------------------"
        echo "| 3 | $A3 | $B3 | $C3 | $D3 | $E3 | $F3 | $G3 | $H3 |"
        echo "-------------------------------------"
        echo "| 4 | $A4 | $B4 | $C4 | $D4 | $E4 | $F4 | $G4 | $H4 |"
        echo "-------------------------------------"
        echo "| 5 | $A5 | $B5 | $C5 | $D5 | $E5 | $F5 | $G5 | $H5 |"
        echo "-------------------------------------"
        echo "| 6 | $A6 | $B6 | $C6 | $D6 | $E6 | $F6 | $G6 | $H6 |"
        echo "-------------------------------------"
        echo "| 7 | $A7 | $B7 | $C7 | $D7 | $E7 | $F7 | $G7 | $H7 |"
        echo "-------------------------------------"
        echo "| 8 | $A8 | $B8 | $C8 | $D8 | $E8 | $F8 | $G8 | $H8 |"
        echo "-------------------------------------"

        }
        convertisseur() # fonction qui convertit les Xn en nn, ex: B3 -> 32
        {
        case $shoot in
        A1) shoot=11 ;;
        A2) shoot=21 ;;
        A3) shoot=31 ;;
        A4) shoot=41 ;;
        A5) shoot=51 ;;
        A6) shoot=61 ;;
        A7) shoot=71 ;;
        A8) shoot=81 ;;
        B1) shoot=12 ;;
        B2) shoot=22 ;;
        B3) shoot=32 ;;
        B4) shoot=42 ;;
        B5) shoot=52 ;;
        B6) shoot=62 ;;
        B7) shoot=72 ;;
        B8) shoot=82 ;;
        C1) shoot=13 ;;
        C2) shoot=23 ;;
        C3) shoot=33 ;;
        C4) shoot=43 ;;
        C5) shoot=53 ;;
        C6) shoot=63 ;;
        C7) shoot=73 ;;
        C8) shoot=83 ;;
        D1) shoot=14 ;;
        D2) shoot=24 ;;
        D3) shoot=34 ;;
        D4) shoot=44 ;;
        D5) shoot=54 ;;
        D6) shoot=64 ;;
        D7) shoot=74 ;;
        D8) shoot=84 ;;
        E1) shoot=15 ;;
        E2) shoot=25 ;;
        E3) shoot=35 ;;
        E4) shoot=45 ;;
        E5) shoot=55 ;;
        E6) shoot=65 ;;
        E7) shoot=75 ;;
        E8) shoot=85 ;;
        F1) shoot=16 ;;
        F2) shoot=26 ;;
        F3) shoot=36 ;;
        F4) shoot=46 ;;
        F5) shoot=56 ;;
        F6) shoot=66 ;;
        F7) shoot=76 ;;
        F8) shoot=86 ;;
        G1) shoot=17 ;;
        G2) shoot=27 ;;
        G3) shoot=37 ;;
        G4) shoot=47 ;;
        G5) shoot=57 ;;
        G6) shoot=67 ;;
        G7) shoot=77 ;;
        G8) shoot=87 ;;
        H1) shoot=18 ;;
        H2) shoot=28 ;;
        H3) shoot=38 ;;
        H4) shoot=48 ;;
        H5) shoot=58 ;;
        H6) shoot=68 ;;
        H7) shoot=78 ;;
        H8) shoot=88 ;;
        esac
        }
        converse()
        { # idem fonction précédente à l envers
        case $conv in
        11) conv=A1 ;;
        12) conv=B1 ;;
        13) conv=C1 ;;
        14) conv=D1 ;;
        15) conv=E1 ;;
        16) conv=F1 ;;
        17) conv=G1 ;;
        18) conv=H1 ;;
        21) conv=A2 ;;
        22) conv=B2 ;;
        23) conv=C2 ;;
        24) conv=D2 ;;
        25) conv=E2 ;;
        26) conv=F2 ;;
        27) conv=G2 ;;
        28) conv=H2 ;;
        31) conv=A3 ;;
        32) conv=B3 ;;
        33) conv=C3 ;;
        34) conv=D3 ;;
        35) conv=E3 ;;
        36) conv=F3 ;;
        37) conv=G3 ;;
        38) conv=H3 ;;
        41) conv=A4 ;;
        42) conv=B4 ;;
        43) conv=C4 ;;
        44) conv=D4 ;;
        45) conv=E4 ;;
        46) conv=F4 ;;
        47) conv=G4 ;;
        48) conv=H4 ;;
        51) conv=A5 ;;
        52) conv=B5 ;;
        53) conv=C5 ;;
        54) conv=D5 ;;
        55) conv=E5 ;;
        56) conv=F5 ;;
        57) conv=F5 ;;
        58) conv=G5 ;;
        61) conv=A6 ;;
        62) conv=B6 ;;
        63) conv=C6 ;;
        64) conv=D6 ;;
        65) conv=E6 ;;
        66) conv=F6 ;;
        67) conv=G6 ;;
        68) conv=H6 ;;
        71) conv=A7 ;;
        72) conv=B7 ;;
        73) conv=C7 ;;
        74) conv=D7 ;;
        75) conv=E7 ;;
        76) conv=F7 ;;
        77) conv=G7 ;;
        78) conv=H7 ;;
        81) conv=A8 ;;
        82) conv=B8 ;;
        83) conv=C8 ;;
        84) conv=D8 ;;
        85) conv=E8 ;;
        86) conv=F8 ;;
        87) conv=G8 ;;
        88) conv=H8 ;;
        esac
        }

        joue()
        { # fonction qui vérifie dans les 8 directions et retourne les pions
        read coul < couleur # importe la couleur du joueur
        if [ "$coul" = "n" ]
        then
        aff="x" # assigne l affichage x ou O en fonction de la couleur
        paff="O"
        else
        aff="O"
        paff="x"
        fi
        convertisseur # converti la case choisie en chiffre
        line=`expr $shoot / 10`
        row=`expr $shoot % 10`
        cased=`expr 8 - $row`
        caseg=`expr $row - 1`
        caseh=`expr $line - 1`
        caseb=`expr 8 - $line`
        if [ $cased -ge $caseh ]
        then casehd=$caseh
        else casehd=$cased
        fi
        if [ $cased -ge $caseb ]
        then casebd=$caseb
        else casebd=$cased
        fi
        if [ $caseg -ge $caseb ]
        then casebg=$caseb
        else casebg=$caseg
        fi
        if [ $caseg -ge $caseh ]
        then casehg=$caseh
        else casehg=$caseg
        fi
        flag=0
        i=1
        shoot3=$shoot
        hyperflag=0
        while [ $i -le $caseb ]
        do
        k=`expr $i \* 10`
        point=`expr $shoot + $k`
        conv=$point
        converse
        read evalu < $conv
        if [ "$evalu" = "$paff" ]
        then
        flag=`expr $flag + 1`
        else
        if [ "$evalu" = "." ]
        then
        break
        else
        if [ "$evalu" = "$aff" ]
        then
        echo $flag
        echo $evalu
        if [ $flag -ge 1 ]
        then
        j=1
        hyperflag=`expr $hyperflag + 1`
        while [ $j -le $flag ]
        do
        shoot3=`expr $shoot3 + 10`
        j=`expr $j + 1`
        conv=$shoot3
        converse
        echo $aff >$conv
        done

        fi
        fi
        fi
        fi
        i=`expr $i + 1`
        done


        flag=0
        i=1
        shoot3=$shoot
        while [ $i -le $caseh ]
        do
        k=`expr $i \* 10`
        point=`expr $shoot - $k`
        conv=$point
        converse
        read evalu <$conv
        if [ "$evalu" = "$paff" ]
        then
        flag=`expr $flag + 1`
        else
        if [ "$evalu" = "." ]
        then
        break
        else
        if [ "$evalu" = "$aff" ]
        then
        if [ $flag -ge 1 ]
        then
        j=1
        hyperflag=`expr $hyperflag + 1`
        while [ $j -le $flag ]
        do
        shoot3=`expr $shoot3 - 10`
        conv=$shoot3
        converse
        j=`expr $j + 1`
        echo $aff >$conv
        done
        fi
        fi
        fi
        fi
        i=`expr $i + 1`
        done

        flag=0
        i=1
        shoot3=$shoot
        while [ $i -le $casebd ]
        do
        k=`expr $i \* 10`
        ad=`expr $i \* 1`
        bd=`expr $k + $ad`
        point=`expr $shoot + $bd`
        conv=$point
        converse
        read evalu <$conv
        if [ "$evalu" = "$paff" ]
        then
        flag=`expr $flag + 1`
        else
        if [ "$evalu" = "." ]
        then
        break
        else
        if [ "$evalu" = "$aff" ]
        then
        if [ $flag -ge 1 ]
        then
        j=1
        hyperflag=`expr $hyperflag + 1`
        while [ $j -le $flag ]
        do
        shoot3=`expr $shoot3 + 11`
        conv=$shoot3
        j=`expr $j + 1`
        converse
        echo $aff >$conv
        done
        fi
        fi
        fi
        fi
        i=`expr $i + 1`
        done

        flag=0
        i=1
        shoot3=$shoot
        while [ $i -le $casehg ]
        do
        k=`expr $i \* 10`
        ad=`expr $i \* 1`
        bd=`expr $k + $ad`
        point=`expr $shoot - $bd`
        conv=$point
        converse
        read evalu <$conv
        if [ "$evalu" = "$paff" ]
        then
        flag=`expr $flag + 1`
        else
        if [ "$evalu" = "." ]
        then
        break
        else
        if [ "$evalu" = "$aff" ]
        then
        if [ $flag -ge 1 ]
        then
        j=1
        hyperflag=`expr $hyperflag + 1`
        while [ $j -le $flag ]
        do
        shoot3=`expr $shoot3 - 11`
        j=`expr $j + 1`
        conv=$shoot3
        converse
        echo $aff >$conv
        done
        fi
        fi
        fi
        fi
        i=`expr $i + 1`
        done

        flag=0
        i=1
        shoot3=$shoot
        while [ $i -le $casehd ]
        do
        k=`expr $i \* 10`
        ad=`expr $i \* 1`
        bd=`expr $k - $ad`
        point=`expr $shoot - $bd`
        conv=$point
        converse
        read evalu <$conv
        if [ "$evalu" = "$paff" ]
        then
        flag=`expr $flag + 1`
        else
        if [ "$evalu" = "." ]
        then
        break
        else
        if [ "$evalu" = "$aff" ]
        then
        if [ $flag -ge 1 ]
        then
        j=1
        hyperflag=`expr $hyperflag + 1`
        while [ $j -le $flag ]
        do
        shoot3=`expr $shoot3 - 9`
        j=`expr $j + 1`
        conv=$shoot3
        converse
        echo $aff >$conv
        done
        fi
        fi
        fi
        fi
        i=`expr $i + 1`
        done

        flag=0
        i=1
        shoot3=$shoot
        while [ $i -le $casebg ]
        do
        k=`expr $i \* 10`
        ad=`expr $i \* 1`
        bd=`expr $k - $ad`
        point=`expr $shoot + $bd`
        conv=$point
        converse
        read evalu <$conv
        if [ "$evalu" = "$paff" ]
        then
        flag=`expr $flag + 1`
        else
        if [ "$evalu" = "." ]
        then
        break
        else
        if [ "$evalu" = "$aff" ]
        then
        if [ $flag -ge 1 ]
        then
        hyperflag=`expr $hyperflag + 1`
        while [ $j -le $flag ]
        do
        shoot3=`expr $shoot3 + 9`
        j=`expr $j + 1`
        conv=$shoot3
        converse
        echo $aff >$conv
        done
        fi
        fi
        fi
        fi
        i=`expr $i + 1`
        done

        flag=0
        i=1
        shoot3=$shoot
        while [ $i -le $cased ]
        do
        point=`expr $shoot + $i`
        conv=$point
        converse
        read evalu <$conv
        if [ "$evalu" = "$paff" ]
        then
        flag=`expr $flag + 1`
        else
        if [ "$evalu" = "." ]
        then
        break
        else
        if [ "$evalu" = "$aff" ]
        then
        if [ $flag -ge 1 ]
        then
        j=1
        hyperflag=`expr $hyperflag + 1`
        while [ $j -le $flag ]
        do
        j=`expr $j + 1`
        shoot3=`expr $shoot3 + 1`
        conv=$shoot3
        converse
        echo $aff >$conv
        done
        fi
        fi
        fi
        fi
        i=`expr $i + 1`
        done

        flag=0
        i=1
        shoot3=$shoot
        while [ $i -le $caseg ]
        do
        point=`expr $shoot - $i`
        conv=$point
        converse
        read evalu <$conv
        if [ "$evalu" = "$paff" ]
        then
        flag=`expr $flag + 1`
        else
        if [ "$evalu" = "." ]
        then
        break
        else
        if [ "$evalu" = "$aff" ]
        then
        if [ $flag -ge 1 ]
        then
        j=1
        hyperflag=`expr $hyperflag + 1`
        while [ $j -le $flag ]
        do
        shoot3=`expr $shoot3 - 1`
        j=`expr $j + 1`
        conv=$shoot3
        converse
        echo $aff >$conv
        done
        fi
        fi
        fi
        fi
        i=`expr $i + 1`
        done






        if [ "$hyperflag" = "0" ]
        then
        read ultra<ultraflag
        if [ "$ultra" = "1" ]
        then
        finpartie
        else
        echo "0">ultraflag
        fi
        echo "1">ultraflag
        echo ".">$shoot5
        echo "Coup impossible, réessayez"
        echo "Appuyez pour continuer"
        read lasparticho
        tir
        else
        echo $aff >$shoot5

        fi


        clear
        tableau
        sleep 3
        echo l>who
        sleep 2
        change
        }
        change()
        {

        read coul < couleur
        if [ "$coul" = "n" ]
        then
        echo b > couleur
        else
        echo n > couleur
        fi


        suite
        }
        finpartie()
        {
        echo "La Partie est finie"
        xcomp=0
        Ocomp=0
        for i in A B C D E F G H
        do
        for j in 1 2 3 4 5 6 7 8
        do
        read temp< $i$j
        if [ "$temp" = "x" ]
        then
        xcomp=`expr $xcomp + 1`
        fi
        if [ "$temp" = "O" ]
        then
        Ocomp=`expr $Ocomp + 1`
        fi
        done
        done
        echo "Le Joueur noir [x] a marqué $xcomp points"
        echo "Le Joueur blanc [O] a marqué $Ocomp points"
        echo "Appuyez sur pour recommencer ou sur une touche pour quitter"
        read touche
        if [ "$touche" = "r" ]
        then
        attente
        else
        exit 0
        fi


        }
        attente()
        {
        echo "x" >E4
        echo "O" >E5
        echo "O" >D4
        echo "x" >D5
        aff="O"
        clear
        echo "Attente de l'autre joueur"
        i=0
        read var2 < file

        if [ "$var2" = "r" ]
        then
        echo b>who
        echo rg > file
        coul="b"
        echo b > couleur
        pascoul="n"
        echo "vous etes blanc - vos pions sont [OO]"
        sleep 2
        suite
        else
        echo r > file
        while i=0
        do
        sleep 3
        read joueur < file
        if [ "$joueur" = "rg" ]
        then
        echo "vous etes noir - vos pions sont [xx]"
        break
        fi
        done
        suite
        fi
        }



        tir()
        {
        clear
        tableau
        echo w>who
        read color<couleur
        if [ "$color" = "n" ]
        then
        affi="x"
        else
        affi="O"
        fi
        echo "Votre couleur est [$affi]"
        echo "Où voulez vous jouer? Ecrivez en majuscule (exemple: X4)"
        read shoot
        if [ "$shoot" = "q" ]
        then
        exit 0
        else
        shoot2=$shoot
        shoot5=$shoot
        read testa <$shoot
        echo $testa
        echo $shoot
        if [ "$testa" = "." ]
        then
        echo $shoot >$shoot
        eval "$shoot=$shoot2"
        joue
        else

        echo "Coup impossible, réessayez"
        echo "Appuyez sur pour continuer"
        read sertawait
        tir
        fi
        fi
        }

        suite ()
        {
        read var1<who
        if [ "$var1" = "$coul" ]
        then
        echo w >who
        tir
        else

        echo "Attendez que l'autre joueur finisse"
        i=0
        while i=0
        do
        sleep 1
        read attent<who
        if [ "$attent" = "l" ]
        then
        echo good
        tir
        fi
        done
        fi
        }
        attente

Suivre le flux des commentaires

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