 programmation en shell bash sous linux but de ce document ce document me sert de mémo sur la programmation en shell bash il liste sans entrer dans le détail les principales possibilités en programmation bash premier script avec votre éditeur de texte préféré saisir ces deux lignes dans le fichier  testsh  bin bash echo bonjour le monde  remarques  l extension du fichier sh en l occurrence n a pas d importance il est même possible de ne pas en mettre la première ligne est obligatoire car elle permet d indiquer au shel qui va exécuter le script qu il doit utiliser le bash pour faire fonctionner ce script il faut commencer par le rendre exécutable chmod x testsh et nous pouvons le tester testsh bonjour le monde les variables affecter une valeur à une variable x toto ou en utilisant des guillemets pour protéger les espaces et les caractères spéciaux x toto et tutu  remarque  il ne faut pas mettre d espace de chaque coté du signe égale cette commande permet d initialiser la variable avec la valeur indiquée seulement si celleci est vide x x valeur par défaut  récupérer le résultat d une commande x ls etc ou x ls etc  afficher le contenu d une variable echo x ou echo x  les tableaux affecter une valeur à un tableau tab 0 toto lire le contenu du tableau echo tab 0  remarque  dans ce cas il est obligatoire d utiliser les accolades pour lire le contenu protection des expressions le  backslash  permet de protéger tous les caractères spéciaux y compris lui même echo le  guillemet double  permet de protéger tous les caractères sauf lui même qu il faut protéger avec un  backslash  et le ce qui permet d interpréter le contenu des variables echo x x x toto l apostrophe permet de protéger tous les caractères sauf elle même echo x x x x les calculs addition a 10 b 20 c a b echo a b c a b 30 multiplication et division a 10 b 20 c 2 d a b c echo a b c d a b c 100 le traitement des chaînes de caractères concaténation de chaînes de caractères a toto b tutu c a et b echo c toto et tutu supprime les 5 premiers caractères de la chaîne fich testtargz echo fich 5 targz extrait 3 caractères à partir du cinquième tony etch fich testtargz echo fich 53 tar le signe permet de supprimer le plus petit suffixe correspond à l expression régulière fich testtargz echo fich testtar le signe permet de supprimer le plus grand suffixe correspond à l expression régulière fich testtargz echo fich test le signe permet de supprimer le plus petit préfixe correspond à l expression régulière fich testtargz echo fich targz le signe permet de supprimer le plus grand préfixe correspond à l expression régulière fich testtargz echo fich gz remplace la première souschaîne trouvée par celle proposée fich testtargz echo fich targz tgz testtgz remplace toutes les souschaînes trouvées par celle proposée fich testtargztargz echo fich targz tgz testtgztgz la commande suivante permet de retrouver la longueur d une chaîne fich testtargz echo fich 11 utilisation des pipelines le caractère permet d envoyer la sortie d une commande sur l entrée de la commande suivante exemple df h tail 1 sed s g cut d f 4 42g la même chose avec  awk  df h tail 1 awk print 4 42g l enchaînement de commandes sur une même ligne ces commandes sont exécutées les unes derrières les autres echo debut echo fin debut fin la dernière commande est exécuté uniquement si la commande précédente c est exécutée avec succès echo debut true echo fin debut fin la dernière commande est exécuté uniquement si la commande précédente a retourné une erreur echo debut false echo fin debut fin les redirections envoie la sortie standard dans le fichier lstxt ls etc lstxt envoie la sortie standard à la fin du fichier lstxt ls etc lstxt envoie la sortie d erreur dans le fichier lserr ls toto 2 lserr redirection de la sortie standard et de la sortie d erreur dans deux fichiers séparés ls etc lstxt 2 lserr envoie la sortie d erreur et la sortie standard dans le fichier lstxt ls toto 2 1 lstxt la même chose en plus court ls toto lstxt redirige le résultat de deux commandes dans lstxt ls etc ls toto lstxt opérateur de test  l opérateur de test retourne vrai si la condition est vrai et faux dans le cas contraire donc cette ligne exécutera la commande  echo  seulement si le fichier existe f testsh echo ok arguments les plus courant de l opérateur option vrai si e fichier le fichier indiqué existe d répertoire le répertoire indiqué existe f fichier le fichier indiqué est un fichier régulier h fichier le fichier indiqué est un lien symbolique chaine1 chaine2 les deux chaînes sont identiques val1 eq val2 les deux valeurs sont égales val1 ge val2 val1 val2 val1 gt val2 val1 val2 val1 le val2 val1 val2 val1 lt val2 val1 val2 val1 ne val2 val1 val2 condition ifelsefi  syntaxe générale if condition then else fi cette instruction s utilise en générale avec l opérateur de test détaillé au chapitre précédent exemple if f testsh then echo ok fi ou sur une seule ligne if f testsh then echo ok fi condition caseesac  syntaxe générale case expression in motif1 commande 1 motif2 commande 2 esac le motif peut contenir n importe quelle chaîne de caractères n importe quel caractère abc alternance de caractères az suite de caractères ou permettant de combiner plusieurs motifs exemple bin bash while n 1 do ping c 1 w 1 1 dev null 2 1 case in 0 echo e 1 t ok 1 echo e 1 t injoignable 2 echo e 1 t inexistant esac shift done boucle whiledone  syntaxe générale while condition do done exemple i 0 while i lt 5 do i i 1 echo i done la même chose sur une ligne i 0 while i lt 5 do i i 1 echo i done un autre exemple en utilisant l instruction  break  permettant de sortie de la boucle i 0 while true do echo i avec break i i 1 i eq 5 break done boucle untildone  syntaxe générale until condition do done boucle fordone  le fonctionnement de cette boucle est très différent de celui des autres langages syntaxe for variale in listedemots do done exemple for var in a b c d do echo var done renommer une série de fichiers for i in tgz do mv i i tgz targz done boucle selectdone permet de réaliser des listes de choix exemple select var in a b c do echo var done 1 a 2 b 3 c  fonctions voici la syntaxe générale d une fonction function nomdelafonction  passage d arguments  0 contient le nom du script 1 premier argument 2 deuxième argument  10  dixième argument attention 10 retourne le premier argument suivi de 0 tous les arguments mais sans protéger les espaces et caractères spéciaux tous les arguments mais en protégeant les espaces et caractères spéciaux nombre d arguments de la fonction la commande  shift  permet de décaler les variables le contenu de 1 est remplacé par celui de 2 cela permet par exemple de lire le contenu de toute les variables while n 1 do echo 1 shift done affiche la lites des arguments passés au script for i in do echo i done la même chose en plus court for i do echo i done traitement des options dans un script traitement des options sans arguments l instruction  getopts  permet de traiter les options passées en ligne de commande dans cet exemple nous avons comme options a b et ou c l ordre des options n a pas d importance et il est possible de les coller ou pas while getopts abc option do case option in a echo option a b echo option b c echo option c esac done test traiteargumentssh c ab option c option a option b traitement des options avec argument si une option nécessite un argument il faut la faire suivre du signe et la valeur de l argument sera accessible dans la variable optarg exemple while getopts abc d option do case option in a echo option a b echo option b c echo option c argument optarg d echo option d argument optarg esac done test traitearguments2sh c toto ab d tutu option c argument toto option a option b option d argument tutu traitement des erreurs pour gérer les erreurs il faut ajouter dans la liste des options possibles cela permettra de traiter les options sans arguments et pour traiter les options inconnues  getopts  retourne qu il suffit de traiter dans le script while getopts abc d option do case option in a echo option a b echo option b c echo option c argument optarg d echo option d argument optarg echo argument manquant pour l option optarg echo option optarg inconnue esac done traitement des options longues sans arguments par défaut  getopts  ne sais pas traiter les options longues mais une petite astuce permet de contourner ce problème pour les options sans argument pour cela il suffit de d ajouter dans les options et de traiter en premier le cas des options longues while getopts hv option do if option then case optarg in help option h version option v echo option optarg inconnue esac fi case option in h echo option h v echo option v echo option optarg inconnue esac done test traitearguments3sh version h a option v option h option a inconnue pour avoir plus d informations pour avoir plus d explications sur la programmation en bash mais également avec sed awk perl tcl tk python ruby je vous conseille la lecture de cet excellent livre dont deux chapitres sont disponibles au format pdf  http wwweditionseyrollescom livre 9782212110289 langagesdescriptssouslinux historique des modifications version date commentaire 01 140808 création par tony galmiche programmation en shell bash sous linux il y a un probleme avec bin bash a cause de spip l espace en trop  programmation en shell bash sous linux bein je ne vois pas trop ce que tu veux dire si c est l espace entre le point d exclamation et le slash c est normal mais pas obligatoire sinon je ne vois pas d espace entre le dieze et le point d exclamation programmation en shell bash sous linux bravo pour ce tuto je me disais qu un jour il faudrait que je m y mette car cela est parfois bien pratique juste deux petites coquilles au passage à la fin du tuto je vous conseil le la lecture de cet excellent livre dont deux chapitres sont disponible s au format pdf a la vitesse des tutos qui sortent il me faut des vacances que pour cela merci du partage programmation en shell bash sous linux je met jamais d espace et je croyais naïvement qu il n en fallait pas désolé pour le bruit  programmation en shell bash sous linux bonjour quelques astuces pour compléter ton mémo comment cacher la saisie d entrée clavier utile pour les mots de passe stty echo et pour la réactiver stty echo seconde astuce comment enregistrer la saisie d entrée clavier comment récupérer ce que l utilisateur va tapper au clavier set variable ici c est le qui va récupérer la saisie le tout illustré dans un exemple concret bin csh echo n entrez votre identifiant set ident stty echo désactive l affichage des entrées claviers echo n entrez votre mot de passe set mdp stty echo réactivation de l affichage echo n tapez du texte pour vérifier la réactivation de l affichage set test maintenant on affiche le ident et mdp à ne pas faire biensur si tu caches l affichage c est pas pour l afficher derrière echo id ident et mdp mdp et on constate aussi que permet la saisie par le terminal vers une variable script set nomvariable voila j espère que c est deux petites astuces vous serviront   shell  