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
    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
      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]$  
        ;-))
        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+
          1. Modérateur
            Merci ;-))
        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
          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#
            1. Modérateur
              Affiche la sortie de :
              ls -l /bin/*sh
              Merci.
          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+

            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#
              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#
                1. meci pour votre aides et vos explications
                  1. Modérateur
                    Remplace tous les "==" par "=" et ça devrait aller mieux ;-))