====== Bash Scripting ====== ===== Introduction ===== Quelques exemples de scripts - ou de lignes commandes - shell pour répondre à quelques problèmes fréquemment rencontrés. ===== Les variables spéciales ===== ^Variable ^Description ^ |$#|Nombre d'arguments passés au script| |$*|Liste des arguments| |$0, $1, $2, ...|Arguments passés au script ($0 = nom du script)| |$?|Code de retour dernière commande| |$!|pid de la dernière commande lancée en tâche de fond| |$$|pid du script| ==== Exemples ==== # Tester le résultat d'appel d'une fonction / commande # Par défaut : 0 = ok if [ $? -eq 0 ]; then echo "ok" else echo "pas ok" fi ===== Les tests ===== function cleanupfiles() { fileCount=0 for aFile in `ls -t ./tests/*.bz2` do let fileCount+=1 # On conserve les 5 fichiers les plus recents if [ "$fileCount" -gt 5 ]; then echo $fileCount "remove " $aFile fi done } ===== Les fonctions ===== ==== Sans paramètres ==== #!/bin/bash function quit() { exit } function helloworld() { echo Hello World! } helloworld quit # "quit" quitte, le code ci après n'est pas exécuté echo done ... ==== Avec paramètres ==== #!/bin/bash function say() { echo $1 } say "Hello World!" ==== Liens ==== [[http://www.linuxjournal.com/content/return-values-bash-functions|http://www.linuxjournal.com/content/return-values-bash-functions]] ===== Extraire le nom ou le répertorie d'un fichier ===== # Première méthode basée sur dirname et basename f=/mypath/myfile.txt dirname $f # /mypath basename $f # myfile.txt basename $f .txt # myfile Lien : [[http://tldp.org/LDP/LGNET/18/bash.html]] ===== Renommer des fichiers ===== # Sur base d'une boucle for i in *.JPG; do echo $i; done $i contient le nom du fichier. Sur base de cette variable nous pouvons appliquer quelques changements, copier ou renommer des fichiers. # Exemple d'utilisation d'une variable i=ma_photo.JPG echo $i ma_photo.JPG # Supprression d'une partie du nom du fichier echo ${i/.JPG/} ma_photo __Cas pratique__ : ajout d'un "_" avant l'extension du fichier. Exemple : **PICT0001.JPG devient PICT0001_.JPG** for i in *.JPG; do mv $i ${i/.JPG/}_.JPG; done ===== Fichiers de paramètres ===== [[http://wiki.bash-hackers.org/howto/conffile]] ===== Quelques liens et autres informations pratiques ===== Bash Programming How-To : [[http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html]]