if imbriqué ou case

if imbriqué ou case - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 18-02-2004 à 00:42:11    

J'ai le résultat voulu, mais est-ce que c'est de la "programmation correcte" ou c'est mieux avec des "cases". Il me semble d'avoir déja vu que les "if" imbriqués n'était pas la bonne facon....
 
 
 

Code :
  1. #!/bin/bash
  2. operande1=${1:?"Specifiez un nombre"}
  3. operateur=${2:?"Specifiez un operateur"}
  4. operande2=${3:?"Specifiez un deuxieme nombre"}
  5. sum=$(($operande1 + $operande2))
  6. rest=$(($operande1 - $operande2))
  7. if [[ "$operateur" != "+" ]] && [[ "$operateur" != "-" ]]
  8. then
  9. echo -e "operateur non supporte"
  10. else
  11.   if [ "$operateur" = "+" ]
  12.    then
  13.    echo -e "$operande1 + $operande2 = ${sum}"
  14.    else
  15.    [ "$operateur" = "-" ]
  16.    echo -e "$operande1 - $operande2 = ${rest}"
  17.   fi
  18. fi

Reply

Marsh Posté le 18-02-2004 à 00:42:11   

Reply

Marsh Posté le 18-02-2004 à 01:23:25    

moi je trouve qu'un case est plus lisible

Reply

Marsh Posté le 18-02-2004 à 04:16:10    

Perso je pense que le case est plus interressant. Rapidement voila ce que j'aurais fait:
 

Code :
  1. #!/bin/bash
  2. operande1=${1:?"Specifiez un nombre"}
  3. operateur=${2:?"Specifiez un operateur"}
  4. operande2=${3:?"Specifiez un deuxieme nombre"}
  5. sum=$(($operande1 + $operande2))
  6. rest=$(($operande1 - $operande2))
  7. case $operande1 in
  8.       "+" )echo "$operande1 + $operande2 = $sum";break;;
  9.       "-" )echo "$operande1 - $operande2 = $rest";break;;
  10.       *)  echo "operateur non supporte";;
  11. esac
  12. #voila
  13. #
  14. #info1: le -e n'est pas necessaire ici
  15. #info2: $sum et $rest sont deja des resultats les {} ne sont pas necessaires
  16. #info3: j'ai mis des break pour sortir directement du case, sinon le script va tester les conditions qui suivent, hors ici on est sur de n'avoir qu'un choix
  17. #differences:
  18. #     Avec tes if imbriques tu faisais 4 tests minimum, avec le case au max tu en fait 3 donc gain de temp.
  19. #     C'est pas plus claire comme ca???


 
 
 

_Faust_ a écrit :

J'ai le résultat voulu, mais est-ce que c'est de la "programmation correcte" ou c'est mieux avec des "cases". Il me semble d'avoir déja vu que les "if" imbriqués n'était pas la bonne facon....
 
 
 

Code :
  1. #!/bin/bash
  2. operande1=${1:?"Specifiez un nombre"}
  3. operateur=${2:?"Specifiez un operateur"}
  4. operande2=${3:?"Specifiez un deuxieme nombre"}
  5. sum=$(($operande1 + $operande2))
  6. rest=$(($operande1 - $operande2))
  7. if [[ "$operateur" != "+" ]] && [[ "$operateur" != "-" ]]
  8. then
  9. echo -e "operateur non supporte"
  10. else
  11.   if [ "$operateur" = "+" ]
  12.    then
  13.    echo -e "$operande1 + $operande2 = ${sum}"
  14.    else
  15.    [ "$operateur" = "-" ]
  16.    echo -e "$operande1 - $operande2 = ${rest}"
  17.   fi
  18. fi




 

Reply

Marsh Posté le 18-02-2004 à 09:49:11    

cobra_sa a écrit :

Code :
  1. #info3: j'ai mis des break pour sortir directement du case, sinon le script va tester les conditions qui suivent, hors ici on est sur de n'avoir qu'un choix




 
Les break sont inutiles, ';;' fait office de break et est obligatoire.
Il n'y a pas moyen, à ma connaissance, d'exécuter deux clauses d'un select.


---------------
Jean Pierre.
Reply

Marsh Posté le 18-02-2004 à 10:05:17    

autant pour moi je confond avec le java ou le C je sais plus

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed