bash
est le shell par défaut sur les stations Unix/Linux. Il s'agit d'une extension au shell de base sh afin de le rendre plus performant et plus facile à utiliser.
On peut déjà écrire des scripts assez puissants en bash avec juste quelques notions de bases:
VAR=valeur
$VAR
. De plus, on peut effectuer toute une série de traitement sur la valeur de la variable. Par exemple, pour retirer la chaîne foo
à la fin de la variable, VAR=${VAR%foo}
(pour plus de détails, voir la section Parameter expansion du man de bash).
programme > fichier
programme < fichier
programme1 | programme2
VAR=`programme`
if [ condition ]; then commandes; else commandes; fi
for ((VAR=1; VAR<10; VAR++)); do commandes_qui_utilisent_$VAR; done
for VAR in liste; do commandes_qui_utilisent_$VAR; done
. La liste peut être une suite d'éléments séparés par des espaces element1 element2 element3 mais aussi utiliser des jokers *.c
Il suffit maintenant de combiner tout cela en utilisant aussi les commandes incluses directement dans bash (tapez help
dans bash), ainsi que tous les programmes de base à votre disposition (grep
, sort
, head
, etc.: voir man nom_de_la_commande
).
Un petit exemple pour illustrer le principe:
for NAME in *.c; do if (tail -n 10 < $NAME | grep wiki); then mv $NAME ${NAME%.c}.wiki fi done
Ce tout petit script va renommer tous les fichiers se terminant par .c et contenant la chaîne wiki dans les 10 dernières lignes en un fichier portant le même nom mais avec l'extension .wiki.
userinfo.sh
L'objectif de cet exercice est de construire de façon incrémentale un petit script donnant des informations sur un utilisateur du système.
Les spécifications (loosy :-)) sont les suivantes :
uid
et gid
effectif utilisés
ypcat passwd
, dont on raffine l'output avec grep
Les «corrigés» des differentes étapes vue pendant le séminaire :
ypcat passwd
if
, vérifer les arguments, code de retour, substitution
for
, utilisation de la variable IFS
pour présenter les informations
Lorsqu'il est utilisé en ligne de commande, <code>bash</code> contient plusieurs facilités pour simplifier la vie de son utilisateur :
bash
conserve un historique des dernières commandes tapées. Les flèches haut et bas permettent de récupérer les commandes précédentes. L'historique des commandes est stockée dans le fichier ~/.bash_history
bash
suggère la fin de la commande ou du nom de fichier
&
. Par exemple, xterm &
vous permettra de lancer une fenêtre de terminal supplémentaire.
CTRL-C
. Si cela ne fonctionne pas, utilisez ps pour déterminer le numéro du processus et ensuire kill pour le supprimer
CTRL-Z
. Un processus suspendu ne progresse plus. Vous pouvez le mettre en tâche de fond avec la commande bg
ou le remettre comme tâche principale avec fg
man bash