Script shell - besoin d'aide

Résolu
charline159 Messages postés 216 Statut Membre -  
charline159 Messages postés 216 Statut Membre -
Bonjour! J'ai fait ce petit script shell... et pour résumer:

- si les deux paramètres rentrés par l'utilisateur sont pareils, alors j'affiche un message pour dire qu'ils sont identiques;
- s'ils sont différents, alors le message indique qu'ils sont différents;
- si l'utilisateur a rentré un nombre de paramètres différents de deux (aucun, un seul ou plus de deux paramètres) alors le message lui indique qu'il n'a pas rentré deux paramètres.

#!/bin/bash

if [ $1 = $2 ]
then
echo "Les deux paramètres sont identiques."
elif [ $1 != $2 ]
then
echo "Les deux paramètres sont différents."
elif [ ! $# -eq 2 ]
then
echo "Vous n'avez pas rentré deux paramètres."
fi

Et donc quand j'exécute le script, la troisième condition ne marche pas, et je ne sais pas pourquoi: si je tape le script sans paramètre, alors je vais avoir un message qui m'indique "les deux paramètres sont identiques".

Est-ce que quelqu'un aurait une solution à ça svp?

Merci pour votre aide!

1 réponse

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Il faut placer ta condition qui teste le nombre de paramètre en 1er !

    De plus, la condition de test du nombre de paramètre doit s'écrire
    [ $# -ne 2 ]
    ;-\

    #!/bin/bash
    
    if [ $# -ne 2 ]
    then
            echo "Vous n'avez pas rentré deux paramètres." 
    elif [ $1 = $2 ]
    then
            echo "Les deux paramètres sont identiques."
    elif [ $1 != $2 ]
    then
            echo "Les deux paramètres sont différents."
    fi


    0
    1. charline159 Messages postés 216 Statut Membre 1
       
      Effectivement, ça marche! Merci beaucoup!

      Dois-je en conclure qu'il faut toujours mettre les "cas particuliers" (si l'utilisateur n'a pas correctement indiqué ce qu'il faut) en première condition?
      0
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > charline159 Messages postés 216 Statut Membre
         
        Ben disons que le nombre de caractères est la condition sine qua none ici, donc oui il faut la mettre en 1er.
        0
    2. charline159 Messages postés 216 Statut Membre 1
       
      Ok merci pour ta réponse !
      J'ai encore une question: à présent, je souhaite qu'on m'indique si le nombre que je rentre est trop grand ou trop petit.

      #!/bin/bash

      if [ $# -ne 1 ]
      then
      echo "Veuillez rentrer un chiffre ou nombre en paramètre!"
      elif [ $1 -eq 10 ]
      then
      echo "parfait!"
      elif [ $1 -gt 10 ]
      then
      echo "c'est trop!"
      else
      echo "ce n'est pas assez!"
      fi


      Et donc, cette fois, comment faire pour que mon script prenne en compte plusieurs chiffres/nombres en même temps? Comme ça, si je tapais par exemple 3 nombres en même temps, il m'afficherait 3 messages d'affilées d'un coup...
      0
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > charline159 Messages postés 216 Statut Membre
         
        Ben disons que là il faut revoir entièrement le script, avec notamment l'introduction d'une boucle (
        for i in …
        ), et/ou la notion de
        shift
        afin d'évaluer chaque paramètre.
        0
    3. charline159 Messages postés 216 Statut Membre 1
       
      Je vois! Merci beaucoup pour ton aide!
      0