Quelques astuces Shell
Par Cédric Tabin le lundi 06.04.2009, 10:00 - Général - Lien permanent
Voici quelques morceaux de code utiles en Shell script. Rien de bien méchant, juste quelques trucs et astuces qui peuvent rapidement dépanner pour faire de petits scripts !
A noter que toutes les commandes suivantes sont pour le shell de base (#!/bin/sh) et donc devraient être compatible pour n'importe quel interpréteur (bash, csh, tcsh, ...)
Je donne la solution que j'utilise habituellement, mais il existe évidemment une multitude de possibilités différentes via d'autres commandes (expr, tr, ...).
Faire des remplacement de caractères au sein d'une chaîne :
ma_chaine="Ceci est une chaîne" replaced=${ma_chaine//une /une longue } echo $replaced
Faire des calculs :
a=5 b=6 sum=$(($a + $b)) echo $sum
Faire un substring :
a="Hello, World" b=${a:0:5} echo $b
Faire un upperCase :
ma_chaine="test" upper=`echo $ma_chaine | tr [a-z] [A-Z]` echo $upper
Pour pouvoir exécuter sa commande depuis n'importe ou :
cd `dirname $0` current_folder=`pwd` echo "I'm now in folder $current_folder"
Compter le nombre de ligne d'un fichier :
number_lines=`cat monFichier | wc -l` echo $number_lines
Parser correctement tous les paramètres d'un script :
while [ $# -gt 0 ]; do echo $1 shift done
Supprimer tous les répertoires avec un nom spécifique (.svn par exemple) récursivement dans une arborescence :
find . -name \.svn -exec rm -rf {} \;
Si vous avez d'autres petits bouts de code dans le genre, n'hésitez pas à m'en faire part dans les commentaires !
Commentaires
Hello,
Intéressantes ces astuces.
Pour ma part, j'ai dû me mettre un peu aussi à shell pour faire des scripts de Backup SVN, TRAC et Mysql et j'ai trouvé des astuces pour supprimer les anciens backup selon un nombre de jours voulus.
Voici un exemple, mais on peut aller plus loin, je pense.
A++
NairuS
Salut.
Pour les calculs, j'aime souvent avoir un équivalent (ou plus) de la calculatrice, mais en ligne de commande. En plus, on peut probablement facilement l'utiliser dans ses scripts... je pense à l'outil bc.
Pour le lancer en intéractif :
bc -li
Le i pour le mode intéractif et le l pour la librairie de maths de base.
Tant qu'on y est, j'ai dû récemment réencoder tous mes fichiers java pour les distribuer en iso-latin1 (alors que je travaille en utf-8 ... semble plus logique sous linux). Une petite méthode pour le faire sur les fichiers récursivement, d'un encodage à un autre avec iconv :
@@encode_java(){
}@@
Bien sûr, c'est toujours contextuel.
Ps : problème de formattage, la prévisualisation donne le code mauvais sur plusieurs lignes... ?
Pour le substring b=${a:0:5}, par exemple, '0' désigne le premier caractère de la chaîne et '5' la longueur de la sous-chaîne. Donc "une sous-chaîne de 5 caractères de long à partir du premier".
Hope it helps.