Bash

De Teteve wiki
Révision datée du 24 mars 2017 à 10:39 par Teteve (discussion | contributions) (Page créée avec « = Les redirections = Lorsque vous exécutez une commande ou un programme, ceux-ci affichent des informations sur votre console. L'application peut afficher des messages d... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Les redirections

Lorsque vous exécutez une commande ou un programme, ceux-ci affichent des informations sur votre console. L'application peut afficher des messages de type "standard" ou des messages de type "erreur". Chaque type de message est associé à un canal. Le premier est appelé STDOUT, le second STDERR.

Le simple supérieur

ps -ax > /tmp/out

renvoie le canal STDOUT vers le fichier out.

ps -ax > /tmp/out 2> /tmp/err

renvoie le canal STDOUT (canal 1, par défaut) vers le fichier out, et le canal 2 vers le fichier err.

ps -ax > /tmp/out 2>&1

renvoie le canal STDOUT vers le fichier out, et le canal 2 vers le canal 1 (donc dans le fichier out).

ps -ax > /dev/null

ignore la sortie STDOUT (pour tout ignorer : ps -ax > /dev/null 2>&1).

Le double supérieur

Le double supérieur, contrairement au simple, n'efface pas le contenu du fichier avant d'écrire dedans (cas typique : fichiers de logs).

le pipe

ps -ax | grep syslog

affiche STDERR et grep STDOUT

ps -ax 2>&1 | grep syslog

grep STDOUT et STDERR

Le code d'erreur

echo $?

renvoie le résultat de la dernière commande effectuée : 0 = pas d'erreur, 1 = erreur

Le double pipe

Le double pipe signifie "s'il y a des erreurs, alors..."

ps -ax | grep syslog || echo "raté"

affichage de "raté" si le code de sortie de la commande précédente (grep) est différent de 0.

[ -x /usr/sbin/postfix ] || exit 0

si le fichier /usr/sbin/postfix est exécutable, on continue, sinon on quitte avec le code de sortie 0.

Le double &

le double & est le complément du ||. Il signifie "s'il n'y a pas eu d'erreur, alors..." Il peut bien évidemment s'utiliser simultanément avec le double pipe.

[ -x /usr/sbin/postfix ] && echo "fichier exécutable" || echo "fichier non-exécutable"

Syntaxe particulière

[ -f /tmp/toto ] && echo "/tmp/toto existe" || :

Le ":" signifie que le code de retour doit être 0. Utile pour effectuer une action lorsqu'un test est vrai, mais en passant outre l'erreur si elle survient.

Le point virgule

Il permet de définir la fin d'une commande et le début d'une suivante. Les commandes ainsi séparées seront exécutées séquentiellement :

echo "1"; sleep 5; echo "2"

On affiche "1", puis on attend 5 secondes, et on affiche "2".

Le simple &

Il permet de séparer les commandes, mais celles-ci seront exécutées simultanément :

echo "a" & sleep 5 & echo "b"
a
[1] 30553
[2] 30554
b

Dans ce cas, l'affichage de "a" et "b" sera quasi simultané. La commande sleep reste en tache de fond. Chaque processus se voit attribuer un numéro de travail. C'est ce que l'on observe dans l'affichage [2] 30554.
La commande jobs permet de connaître la liste des travaux en cours.
La commande fg (foreground) suivie du numéro de travail permet de le repasser au premier plan.
Pour repasser un processus en tâche de fond, il suffit de taper [Ctrl] + [Z] pour suspendre la tâche en cours, puis d'utiliser la commande bg (background) pour la mettre en tâche de fond.

Echappement des caractères spéciaux

Les caractères comme & - ! @ / \ ; : ^ sont souvent utilisés comme paramètres ou arguments de commande. Pour les utiliser comme caractères "normaux", il faut le spécifier grâce au caractère d'échappement "\"

ps -ax | grep ' \-\-nosid '

De même, pour échapper le caractère "\", on utilise un double \\

ps -ax | grep ' \\ '