PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

bazzanella : Fonctions BASH

mercredi 8 mai 2013 à 18:33

Vous pouvez améliorer vos scripts shell en bash en leur intégrant des fonctions.

Une fonction bash vous permet de ne pas répéter un bout de code dans votre programme. Vous pouvez également grouper vos fonctions dans des fichiers de bibliothèques via la directive source :

#!/bin/bash

source CheminDeVotreBibliotheque
…
  1. #!/bin/bash
  2.  
  3. source CheminDeVotreBibliotheque

Exemple de fonction bash :

#!/bin/bash

# Licence GPL
# Copyleft 2005 Thierry Bazzanella

function OuiNon {
local qst def rep
qst="${1:-'Oui ou Non ? '}"
def="${2}"
while :
do
read -p "${qst}" rep || exit 1
case "$(echo "${rep:-$def}" | tr '[a-z]' '[A-Z]')" in
O|OUI|Y|YES) return 0 ;;
N|NON|NO) return 1 ;;
"" ) : ;;
*) echo "Reponse invalide: ${rep}" ;;
esac
done
}

# avec un parametre
function tafonction {
echo "${1} Visiteur !"
return 7 # de 0 a 255 max
}

# Appel de ta fonction
tafonction "Coucou"
#Recuperation d'un code de retour de tafonction:
# doit etre declaree de suite apres l'appel de tafonction
CODERETOUR_TAFONCTION=$( echo $? )
VALEURRETOUR_TAFONCTION=$( tafonction "et bien" )

#Recuperation de la valeur du parametre
# Retourne par tafonction
# dans ton programme principal:
echo "Une autre valeur de retour est : $VALEURRETOUR_TAFONCTION"
echo "Le code de retour est $CODERETOUR_TAFONCTION"
# Avec echo cequetuveux dans tafonction te permet de recuperer
# une valeur quelconque sur l'entree standard
# Par contre le return 7 te permet de recuperer un code de retour numerique

# tu peux donc avec ces elements faire une fonction OuiNon de ton code
# et declarer le code de cette fonction une seule fois au debut
# de ton programme et l'appeler autant de fois que necessaire.

if OuiNon "Etes-vous favorable a l'utilisation des fonctions ? votre reponse => " Oui
then echo "OK, vous etes favorable. Vous gagnerez en efficacite"
else echo "Ok, vous n'etes pas favorable. Bonjour la maintenance du code !"
fi

if OuiNon "Etes-vous favorable a l'utilisation de GNU/Linux ? votre reponse => " Oui
then echo "OK, vous etes favorable. Vous gagnerez en efficacite"
else echo "Ok, vous n'etes pas favorable. Vous preferez ce bon vieux CP/M !"
fi
  1. #!/bin/bash
  2.  
  3. # Licence GPL
  4. # Copyleft 2005 Thierry Bazzanella
  5.  
  6. function OuiNon {
  7. local qst def rep
  8. qst="${1:-'Oui ou Non ? '}"
  9. def="${2}"
  10. while :
  11. do
  12. read -p "${qst}" rep || exit 1
  13. case "$(echo "${rep:-$def}" | tr '[a-z]' '[A-Z]')" in
  14. O|OUI|Y|YES) return 0 ;;
  15. N|NON|NO) return 1 ;;
  16. "" ) : ;;
  17. *) echo "Reponse invalide: ${rep}" ;;
  18. esac
  19. done
  20. }
  21.  
  22. # avec un parametre
  23. function tafonction {
  24. echo "${1} Visiteur !"
  25. return 7 # de 0 a 255 max
  26. }
  27.  
  28. # Appel de ta fonction
  29. tafonction "Coucou"
  30. #Recuperation d'un code de retour de tafonction:
  31. # doit etre declaree de suite apres l'appel de tafonction
  32. CODERETOUR_TAFONCTION=$( echo $? )
  33. VALEURRETOUR_TAFONCTION=$( tafonction "et bien" )
  34.  
  35. #Recuperation de la valeur du parametre
  36. # Retourne par tafonction
  37. # dans ton programme principal:
  38. echo "Une autre valeur de retour est : $VALEURRETOUR_TAFONCTION"
  39. echo "Le code de retour est $CODERETOUR_TAFONCTION"
  40. # Avec echo cequetuveux dans tafonction te permet de recuperer
  41. # une valeur quelconque sur l'entree standard
  42. # Par contre le return 7 te permet de recuperer un code de retour numerique
  43.  
  44. # tu peux donc avec ces elements faire une fonction OuiNon de ton code
  45. # et declarer le code de cette fonction une seule fois au debut
  46. # de ton programme et l'appeler autant de fois que necessaire.
  47.  
  48. if OuiNon "Etes-vous favorable a l'utilisation des fonctions ? votre reponse => " Oui
  49. then echo "OK, vous etes favorable. Vous gagnerez en efficacite"
  50. else echo "Ok, vous n'etes pas favorable. Bonjour la maintenance du code !"
  51. fi
  52.  
  53. if OuiNon "Etes-vous favorable a l'utilisation de GNU/Linux ? votre reponse => " Oui
  54. then echo "OK, vous etes favorable. Vous gagnerez en efficacite"
  55. else echo "Ok, vous n'etes pas favorable. Vous preferez ce bon vieux CP/M !"
  56. fi

Gravatar de bazzanella
Original post of bazzanella.Votez pour ce billet sur Planet Libre.

Articles similaires