Algorythme utile : https://fr.wikipedia.org/wiki/Tri_rapide

Voici un template pour faire vos scripts :

  • Des exemples ont été mis pour un if et un for

[pastacode lang= »bash » manual= »touch%20nom_appli.sh » message= » » highlight= » » provider= »manual »/]

Avec logger

[pastacode lang= »bash » manual= »%23!%2Fbin%2Fbash%0A%23Fait%20par%20XXXX%2C%20le%20XXXX%0A%23%23%20Information%20%23%23%0A%23Blablabla%0A%0A%23%23%20Gestion%20de%20la%20verbosit%C3%A9%20%23%23%0Aif%20%5B%5B%20%22%24*%22%20%3D%3D%20*–verbose*%20%7C%7C%20%22%24*%22%20%3D%3D%20*-v*%20%5D%5D%3B%20then%0A%20%20%20%20VERBOSE%3D1%0Afi%0A%0A%23%23%20Gestion%20des%20pr%C3%A9requis%20%23%23%0Afunction%20preRequis%20%7B%0A%09for%20arg%20in%20%24%40%3B%20do%0A%09%09if%20!%20which%20%24arg%20%3E%2Fdev%2Fnull%3B%20then%0A%09%09%09echo%20%22La%20commande%20%24arg%20n’est%20pas%20install%C3%A9e%20!!!%22%0A%09%09%09exit%201%0A%09%09fi%0A%09done%0A%7D%0A%0A%23%23%20Sp%C3%A9cifier%20certaines%20erreur%20dans%20le%20fichier%20d’erreur%20%0Afunction%20log_info%20%7B%0A%20%20%20%20logger%20-p%20user.info%20-f%20%24LOG_FILE%20%22%24*%22%0A%20%20%20%20%5B%20%24VERBOSE%20-eq%201%20%5D%20%26%26%20echo%20%22%5BINFO%5D%20%24*%22%0A%7D%0A%0Afunction%20log_error%20%7B%0A%20%20%20%20logger%20-p%20user.error%20-f%20%24ERR_FILE%20-t%20%24%7BSCRIPT%7D%20%22%24*%22%0A%20%20%20%20echo%20%22%5BERROR%5D%20%24*%22%20%3E%262%0A%7D%0A%0A%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%0A%23%20Configuration%20%23%0A%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%0A%0A%23Option%20de%20d%C3%A9bugage%0A%23set%20-x%0AVERBOSE%3D0%0A%24LOCKFILE%3D%20%22%2Fhome%2Frestore_new_expired.lock%22%3B%0A%0ApreRequis%20mysql%20rdiff-backup%3B%0A%0Aif%20%5B%20-e%20%24LOCKFILE%20%5D%0Athen%0A%09log_error%20%22Le%20fichier%20est%20bloqu%C3%A9.%20Soit%20une%20restauration%20est%20d%C3%A9ja%20en%20cours%20soit%20la%20derni%C3%A8re%20restauration%20a%20mal%20fonctionn%C3%A9%22%3B%0Aelse%0A%7B%0A%09%23Commande%201%20%3A%20Test%20de%20processus%0A%09%24PGREP%20-f%20%2Fusr%2Flib%2Fpostfix%2F%3E%20%2Fdev%2Fnull%0A%09if%20%5B%20%24%3F%20-eq%201%20%5D%0A%09then%0A%09%09log_info%20%22Le%20processus%20est%20lanc%C3%A9%22%0A%09else%0A%09%09log_error%20%22Le%20processus%20n’est%20pas%20lanc%C3%A9%22%0A%09fi%0A%09%0A%09%23Commande%202%0A%09for%20var%20in%20%24(ls%20%2Fvar%2Fwww%2F)%0A%09do%0A%09%09echo%20%24var%0A%09done%0A%7D%0A%0A%23Suppresion%20du%20fichier%20lock%0Arm%20-f%20%24LOCKFILE%3B » message= » » highlight= » » provider= »manual »/]

Sans logger

[pastacode lang= »bash » manual= »%23!%2Fbin%2Fbash%0A%23Fait%20par%20XXXX%2C%20le%20XXXX%0A%23%23%20Information%20%23%23%0A%23Blablabla%0A%0A%23%23%20Gestion%20de%20la%20verbosit%C3%A9%20%23%23%0Aif%20%5B%5B%20%22%24*%22%20%3D%3D%20*–verbose*%20%7C%7C%20%22%24*%22%20%3D%3D%20*-v*%20%5D%5D%3B%20then%20VERBOSE%3D1%20fi%0A%0A%23%23%20Gestion%20des%20pr%C3%A9requis%20%23%23%0Afunction%20preRequis%20%7B%0A%09for%20arg%20in%20%24%40%3B%20do%0A%09%09if%20!%20which%20%24arg%20%3E%2Fdev%2Fnull%3B%20then%0A%09%09%09echo%20%22La%20commande%20%24arg%20n’est%20pas%20install%C3%A9e%20!!!%22%0A%09%09%09exit%201%0A%09%09fi%0A%09done%0A%7D%0A%0Aexec%201%3E%3E%20%24LOG_FILE%0Aexec%202%3E%3E%20%24ERR_FILE%0A%0A%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%0A%23%20Configuration%20%23%0A%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%0A%0A%23Option%20de%20d%C3%A9bugage%0A%23set%20-x%0A%23%20Si%20besoin%20d’arr%C3%AAt%20du%20script%20a%20chaque%20erreur%0A%23set%20-e%20%0AVERBOSE%3D0%0A%24LOCKFILE%3D%20%22%2Fhome%2Frestore_new_expired.lock%22%0ALOG_FILE%3D%22%2Fvar%2Flog%2FNOMDELAPPLI_info.log%22%0AERR_FILE%3D%22%2Fvar%2Flog%2FNOMDELAPPLI_error.log%22%0A%0ApreRequis%20mysql%20rdiff-backup%3B%0A%0Aif%20%5B%20-e%20%24LOCKFILE%20%5D%0Athen%0A%09echo%20%22Le%20fichier%20est%20bloqu%C3%A9.%20Soit%20une%20restauration%20est%20d%C3%A9ja%20en%20cours%20soit%20la%20derni%C3%A8re%20restauration%20a%20mal%20fonctionn%C3%A9%22%3B%0A%09exit%201%0Aelse%0A%7B%0A%09if%20%5B%20%24%23%20-lt%202%20%5D%0A%09then%0A%20%20%20%20%20%20%20%20%20%23%20Si%20le%20nombre%20d’arguments%20est%20inf%C3%A9rieur%20%C3%A0%202%0A%20%20%20%20%20%20%20%20%20%23%20on%20retourne%20le%20code%20erreur%201%0A%20%20%20%20%20%20%20%20%20echo%20%22Nombre%20arguments%20incorrect%22%0A%20%20%20%20%20%20%20%20%20exit%201%0A%09else%0A%20%20%20%20%20%20%20%20%20%20%23%20Si%20le%20nombre%20d’arguments%20est%20sup%C3%A9rieur%20ou%20%C3%A9gal%20%C3%A0%202%0A%20%20%20%20%20%20%20%20%20%20%23%20on%20retourne%20le%20code%20erreur%200%0A%20%20%20%20%20%20%20%20%20%20echo%20%22Nombre%20arguments%20correct%22%0A%20%20%20%20%20%20%20%20%20%20exit%200%0A%20%09fi%0A%09%0A%09%23Commande%201%20%3A%20Test%20de%20processus%0A%09%24PGREP%20-f%20%2Fusr%2Flib%2Fpostfix%2F%3E%20%2Fdev%2Fnull%0A%09if%20%5B%20%24%3F%20-eq%201%20%5D%0A%09then%0A%09echo%20%22Le%20processus%20est%20lanc%C3%A9%22%0A%09else%0A%09echo%20%22Le%20processus%20n’est%20pas%20lanc%C3%A9%22%0A%09fi%0A%09%0A%23ou%20%0A%09%23Commande%202%0A%7D%0A%0A%23Suppresion%20du%20fichier%20lock%0Arm%20-f%20%24LOCKFILE%3B%0Aexit%200″ message= » » highlight= » » provider= »manual »/]

Si besoin de debug :

  • Activer l’option set -x ou utiliser bash -x
  • Rediriger les sorties vers un fichier : nom_appli.sh &> monfichier

Information diverses

Variables

var=val ou var="a b"   affectation de la variable « var »
$var ou ${var}   contenu de la variable « var »
${#var}   longueur de la variable « var »

$?   code retour de la dernière commande

Tableaux

  • source : http://www.quennec.fr/trucs-astuces/syst%C3%A8mes/gnulinux/programmation-shell-sous-gnulinux/aspects-avanc%C3%A9s-de-la-programmation-shell/tableaux
tab[0]=val   affectation du premier enregistrement du tableau « tab »
${tab[0]} ou $tab   contenu du premier enregistrement du tableau « tab »
${tab[11]}   contenu du douzième enregistrement du tableau « tab »
${tab[*]}   ensemble des enregistrements du tableau « tab »
${#tab[11]}   longueur du douzième enregistrement du tableau « tab »
${#tab[*]}   nombre d’enregistrements du tableau « tab »

fonction

Faire des menu : http://www.quennec.fr/trucs-astuces/syst%C3%A8mes/gnulinux/programmation-shell-sous-gnulinux/aspects-avanc%C3%A9s-de-la-programmation-shell/gestion-de-menu-avec-select

Bonne pratique

Source : http://fahdshariff.blogspot.fr/2013/10/shell-scripting-best-practices.html

Ces bonnes pratiques ont été inclut dans les templates

  1. Nommer son script avec l’extension « .sh » (facilite la recherche)
  2. Shabang : #!/bin/bash
  3. Ne pas oublier de mettre des quotes a ses paramètres
  4. Documenter les fonctions exemple : # $1 – the name of the input file
  5. Finir son script par exit 0
  6. Lock du fichier
  7. utiliser le set -e
  8. Utiliser $(command1) plutot que a=command1
  9. Log
    1. Si vous utilisez syslog-ng/rsyslog utiliser logger
    2. Si vous n’utiliser pas ces solutions :
      1. exec 1>>/var/log/sauvegarde_differentielle.log
      2. exec 2>>/var/log/sauvegarde_differentielle_error.log
    3. Afficher logger
      1. echo logger afin d’afficher dans le terminal
  10. (facultatif ) module de prerequis