Shell prog

Résolu
salut,
dans le but de comparer 3 chaine j'ai fais comme ca

---------------------
#!/bin/bash
echo "entrer la premiere chaine "
read ch1
echo " enter la deuxieme chaine "
read ch2
echo "enter la 3eme chaine "
read ch3

#ch1=$1
#ch2=$2
#ch3=$3
if \( $ch1 eq $ch2 -a $ch2 eq $ch3 \)
then
echo " les 3 chaine son egaux "

elif \( $ch1 eq $ch2 -a $ch2 -ne $ch3 \)
then
echo " les deux premier chaines sont egaux "

elif \( $ch1 -ne $ch2 -a $ch2 -eq $ch3 \)
then
echo " les deux derniere chaines chaine sont egaux "

elif \( $ch1 -ep $ch3 -a $ch2 -eq $ch3 \)
then
echo " la premiere chaine et la 3eme sont egaux"
else
echo " tout les chaines sont diferente 2 à 2"

fi-------------------------------------------
mais ca n'a pas marcher
qu'il qu'un peut m'aider ?
Configuration: Linux
Firefox 3.0

12 réponses

  1. Modérateur
    Salut,

    Quelques erreurs dans ton script, notamment pour la commande test ([...]) ou au niveau des comparateurs de chaînes (==).
    #!/bin/bash
    
    echo "Entrer la premiere chaine"
    read ch1
    echo "Enter la deuxieme chaine"
    read ch2
    echo "Enter la troisieme chaine"
    read ch3
    
    if [ "$ch1" == "$ch2" -a "$ch1" == "$ch3" ]
    then echo "Les 3 chaînes sont identiques"
    elif [ "$ch1" == "$ch2" ]
    then echo "Les chaînes 1 et 2  sont identiques"
    elif [ "$ch1" == "$ch3" ]
    then echo "Les chaînes 1 et 3  sont identiques"
    elif [ "$ch2" == "$ch3" ]
    then echo "Les chaînes 2 et 3  sont identiques"
    else echo "Les 3 chaînes sont différentes"
    fi
    https://guidespratiques.traduc.org/guides/vf/Bash-Beginners-Guide/Bash-Beginners-Guide.html
    0
    1. ---------------------------------------------------------------
      Entrer la premiere chaine
      qq
      Enter la deuxieme chaine
      aa
      Enter la troisieme chaine
      qq
      [: 28: ==: unexpected operator
      [: 28: ==: unexpected operator
      [: 28: ==: unexpected operator
      [: 28: ==: unexpected operator
      Les 3 chaînes sont différentes
      -----------------------------------------------------------------
      ca n'a pas marché aussi
      0
      1. Modérateur
        Quel shell ?
        Quel système ?
        Quelle distribution ?

        Au cas ou j'aurai fait une erreur lorsque j'ai posté mon message précédent, j'ai recopié le script en le nommant "bar.sh" :
        [tmpfs]$ cat bar.sh
        #!/bin/bash
        
        echo "Entrer la premiere chaine"
        read ch1
        echo "Enter la deuxieme chaine"
        read ch2
        echo "Enter la troisieme chaine"
        read ch3
        
        if [ "$ch1" == "$ch2" -a "$ch1" == "$ch3" ]
        then echo "Les 3 chaînes sont identiques"
        elif [ "$ch1" == "$ch2" ]
        then echo "Les chaînes 1 et 2  sont identiques"
        elif [ "$ch1" == "$ch3" ]
        then echo "Les chaînes 1 et 3  sont identiques"
        elif [ "$ch2" == "$ch3" ]
        then echo "Les chaînes 2 et 3  sont identiques"
        else echo "Les 3 chaînes sont différentes"
        fi
        
        [tmpfs]$ ./bar.sh
        Entrer la premiere chaine
        qq
        Enter la deuxieme chaine
        aa
        Enter la troisieme chaine
        qq
        Les chaînes 1 et 3  sont identiques
        
        [tmpfs]$ ./bar.sh
        Entrer la premiere chaine
        aa
        Enter la deuxieme chaine
        aa
        Enter la troisieme chaine
        aa
        Les 3 chaînes sont identiques
        
        [tmpfs]$ ./bar.sh
        Entrer la premiere chaine
        aa
        Enter la deuxieme chaine
        qq
        Enter la troisieme chaine
        qq
        Les chaînes 2 et 3  sont identiques
        
        [tmpfs]$ ./bar.sh
        Entrer la premiere chaine
        aa
        Enter la deuxieme chaine
        qq
        Enter la troisieme chaine
        ww
        Les 3 chaînes sont différentes
        
        [tmpfs]$  
        ;-))
        0
        1. Contributeur
          re,
          je confirme
           ./teste1
          Entrer la premiere chaine
          aa
          Enter la deuxieme chaine
          dd
          Enter la troisieme chaine
          aa
          Les chaînes 1 et 3  sont identiques
          

          a+
          0
          1. Modérateur
            Merci ;-))
            0
        2. Contributeur
          re
          de rien lol

          a+
          ps: vu que je suppose que comme moi la plus part du temps tu testes ce que tu reponds !!!
          ça ne pouvait que fonctionner vu les indications fournis
          0
          1. quand j'execute avec ./nomfichier j'ai le resultats correcte et quand je fais sh nomfichier
            j'ai des erreurs
            root@mounaim-desktop:/home/mounaim# ./td5ex1.sh
            Entrer la premiere chaine
            mm
            Enter la deuxieme chaine
            aa
            Enter la troisieme chaine
            aa
            Les chaînes 2 et 3 sont identiques
            root@mounaim-desktop:/home/mounaim# sh td5ex1.sh
            Entrer la premiere chaine
            mm
            Enter la deuxieme chaine
            aa
            Enter la troisieme chaine
            aa
            [: 19: ==: unexpected operator
            [: 19: ==: unexpected operator
            [: 19: ==: unexpected operator
            [: 19: ==: unexpected operator
            Les 3 chaînes sont différentes
            root@mounaim-desktop:/home/mounaim#
            0
            1. Modérateur
              Affiche la sortie de :
              ls -l /bin/*sh
              Merci.
              0
          2. Contributeur
            re
            bizarre ton truc car
             sh teste1
            Entrer la premiere chaine
            aa
            Enter la deuxieme chaine
            dd
            Enter la troisieme chaine
            mm
            Les 3 chaînes sont différentes
            

            au fait c'est pas la peine d'ajouter .sh
            a+

            0
            1. root@mounaim-desktop:/home/mounaim# ls -l /bin/*sh
              -rwxr-xr-x 1 root root 702160 2008-05-12 18:33 /bin/bash
              -rwxr-xr-x 1 root root 79988 2008-03-12 11:22 /bin/dash
              lrwxrwxrwx 1 root root 4 2008-10-26 09:05 /bin/rbash -> bash
              lrwxrwxrwx 1 root root 4 2008-10-26 09:05 /bin/sh -> dash
              root@mounaim-desktop:/home/mounaim#
              0
              1. root@mounaim-desktop:/home/mounaim# ls -l /bin/*sh
                -rwxr-xr-x 1 root root 702160 2008-05-12 18:33 /bin/bash
                -rwxr-xr-x 1 root root 79988 2008-03-12 11:22 /bin/dash
                lrwxrwxrwx 1 root root 4 2008-10-26 09:05 /bin/rbash -> bash
                lrwxrwxrwx 1 root root 4 2008-10-26 09:05 /bin/sh -> dash
                root@mounaim-desktop:/home/mounaim# cat td5ex1.sh
                #!/bin/bash

                echo "Entrer la premiere chaine"
                read ch1
                echo "Enter la deuxieme chaine"
                read ch2
                echo "Enter la troisieme chaine"
                read ch3

                if [ "$ch1" == "$ch2" -a "$ch1" == "$ch3" ]
                then echo "Les 3 chaînes sont identiques"
                elif [ "$ch1" == "$ch2" ]
                then echo "Les chaînes 1 et 2 sont identiques"
                elif [ "$ch1" == "$ch3" ]
                then echo "Les chaînes 1 et 3 sont identiques"
                elif [ "$ch2" == "$ch3" ]
                then echo "Les chaînes 2 et 3 sont identiques"
                else echo "Les 3 chaînes sont différentes"
                fi

                root@mounaim-desktop:/home/mounaim# sh td5ex1.sh
                Entrer la premiere chaine
                aa
                Enter la deuxieme chaine
                ss
                Enter la troisieme chaine
                aa
                [: 19: ==: unexpected operator
                [: 19: ==: unexpected operator
                [: 19: ==: unexpected operator
                [: 19: ==: unexpected operator
                Les 3 chaînes sont différentes
                root@mounaim-desktop:/home/mounaim#
                0
                1. Modérateur
                  lrwxrwxrwx 1 root root 4 2008-10-26 09:05 /bin/sh -> dash
                  Voila le problème ;-((

                  C'est pas le shell sh au sens strict (ni un lien symbolique vers /bin/bash comme dans beaucoup de distrib (Mandriva par exemple)), mais un dérivé du shell ash(voir https://fr.wikipedia.org/wiki/Debian_almquist_shell
                  0
                  1. meci pour votre aides et vos explications
                    0
                    1. Modérateur
                      Remplace tous les "==" par "=" et ça devrait aller mieux ;-))
                      0
                  2. moi j'ai exucte cette programme danc
                    il ya quelque chose dans system
                    0