Annexe shell
Commandes utiles en général |
|
echo args | Affiche les arguments args sur la sortie standard. |
read var | Copie la ligne de caractères lue sur l'entrée standard dans la variable var. Typiquement, pour lire une ligne d'un fichier, on utilise read var < fichier. |
expr expression | Calcule le résultat de l’expression arithmétique indiquée en argument et affiche le résultat sur la sortie standard. Attention, ne travaille qu’en arithmétique entière. Typiquement, vous pouvez incrémenter un compteur i avec l'expression suivante i=$(expr $i + 1). |
Contenu des fichiers |
|
cat fich | Affiche le contenu du fichier fich sur la sortie standard. |
grep [opt] motif fich | Affiche (sortie standard) les lignes de fich correspondant au motif motif. Avec l'option –v, affiche les lignes qui ne correspondent pas au motif motif. Si aucun nom de fichier n'est donné, fait la recherche à partir de l'entrée standard. Les motifs utilisés par grep sont différents de ceux utilisés par bash et nous invitons les étudiants à consulter la page de man. Pour grep, le caractère ^ indique le début de ligne, et le caractère $ indique la fin de ligne. |
wc [opt] fich | Affiche sur la sortie standard le comptage d'un nombre d'éléments dans fich. La nature des éléments comptés dépend de l'option utilisée : wc -l compte les lignes, tandis que wc -w compte les mots. Si aucun nom de fichier n'est donné, compte dans l'entrée standard. |
tr seq1 seq2 | Affiche sur la sortie standard le texte reçu de l'entrée standard en substituant le nième caractère de seq1 par le nième caractère de seq2. |
sort [opt] fich | Trie les lignes de fich, par ordre lexicographique croissant. Avec l'option -r, trie dans l'ordre décroissant, et avec -n, trie par ordre numérique. Si aucun nom de fichier n'est donné, trie l'entrée standard. |
cut opt fich | Sélectionne certains champs de chaque ligne de fich. Les options permettent de choisir le délimiteur des champs avec -d delim, et de sélectionner le nème champ avec -f n. |
Environnement du shell |
|
which cmd | Indique le chemin absolue de la commande cmd après avoir recherché cmd dans le PATH. |
alias cmd='...' | cmd devient un alias pour la commande .... alias sans autres options donnent la liste des alias utilisés par bash. |
unalias cmd | Supprime l'alias associé à cmd. |
source script.sh | Exécute les instructions de script.sh dans le processus courant. |
Motifs bash |
|
* | N'importe quelle séquence de caractères. |
? | N'importe quel caractère |
[wtz] | Le caractère w ou le caractère t ou le caractère z. |
[d-r] | Tous les caractères compris entre d et r. |
[[:lower:]]/[[:upper:]] | Alphabet (caractères accentués compris) minuscule/majuscule. |
[[:digit:]] | Chiffres décimaux. |
[[:alpha:]] | Tous les caractères alphabétique, c'est-à-dire toutes les lettres de l'alphabet (caractères accentués compris). |
Système de fichiers |
|
cd [chemin] | Positionne le répertoire courant à “chemin” ou au répertoire de connexion si aucun paramètre n'est donné. |
cp f1 f2 | Copie le fichier f1 dans le fichier f2. Si f2 existait déjà, son ancien contenu est perdu. |
ls [opt] [liste] |
Pour chaque élément e de liste, affiche le contenu du répertoire
e si c'est un répertoire ou le nom du fichier e si c'est un fichier.
Quelques options pour opt :
|
tree [chem] | Affiche l'arborescence des fichiers accessibles à partir de chem. Si chem n'est pas spécifié, utilise le répertoire courant. |
mkdir [opt] rep | Crée le répertoire rep dans le répertoire courant. Si l'option -p est passée en argument, les répertoires intermédiaires sont aussi créés. |
mv f1 f2 | Déplace le fichier f1 dans le fichier f2. Cette commande peut aussi s'appliquer à des répertoires. Si f2 existait déjà, son ancien contenu est perdu. Après l’opération, f1 n’existe plus. |
pwd | Permet de connaître le chemin absolu du répertoire courant (celui dans lequel on se trouve). |
rm f1 | Détruit le fichier f1. |
rmdir rep | Détruit le répertoire rep, à condition que celui-ci soit vide. |
du [opt] fich | Affiche la taille du fichier fich en nombre de blocs suivi du nom du fichier (un bloc correspond à 512 octets). L'option -h permet d'afficher la taille en utilisant des unités de mesure plus usitées par les humains. |
touch fich | Crée le fichier fich s'il n'existe pas, ou met à jour sa date de dernière modification. |
find doss preds | Recherche des fichiers à partir du dossier doss, qui satisfont les prédicats. Par exemple, le prédicat -name motif cherche des fichiers qui correspondent au motif bash motif. Le prédicat -type typ cherche par type de fichier (par exemple des dossiers si typ vaut d, ou des fichiers normaux si typ vaut f). |
chmod perms fich | Change les permissions de fich. perms suit la forme [ugoa]{-+=}[rwx]. Par exemple, chmod u+x fich rajoute (+) le droit d'exécution (x) à l'utilisateur propriétaire (u) sur le fichier fich. Un autre exemple : chmod go=r doss restreint (=) les droits sur fich du groupe propriétaire et de tous les utilisateurs sauf le propriétaire (go) à la lecture uniquement (r). |
ln [opt] cible nom | Établit un lien direct nommé nom vers cible. Si l'option -s est donnée, alors établit un lien symbolique au lieu d'un lien direct. |
Variables notables |
|
HOME | Chemin vers le répertoire de connextion. |
PATH | Liste de chemins séparés par des : dans lesquels bash recherche les commandes. |
Redirection des entrées-sorties |
|
exec n<> fichier |
Ouvre le flux de numéro n en écriture à partir de fichier (en écrasant son
contenu). Par exemple : exec 3<>mon-tube.pipe. Dans la suite du script, on peut alors exécuter echo coucou >&3 pour écrire une donnée ou read x <&3 pour lire une donnée. |
exec n> fichier | Ouvre le flux de numéro n en écriture à partir de fichier (en écrasant son contenu). |
exec n>> fichier | Ouvre le flux de numéro n en écriture à partir de fichier (en ajout). |
exec n< fichier | Ouvre le flux de numéro n en lecture à partir de fichier. |
cmd >&n | Redirige la sortie standard de la commande cmd dans le flux numéro n. |
cmd <&n | Redirige l'entrée standard de la commande cmd à partir du flux numéro n. |
cmd > fichier | Ouvre un flux en écriture à partir de fichier (en écrasant son contenu), avant de rediriger la sortie de cmd dans le flux. |
cmd >> fichier | Ouvre un flux en écriture à partir de fichier (en ajout à la fin), avant de rediriger la sortie de cmd dans le flux. |
cmd < fichier | Ouvre un flux en lecture à partir de fichier, avant de rediriger l'entrée de cmd à partir du flux. |
Processus |
|
; | Permet de séparer deux commandes exécutées en séquentiel. |
& | Exécute la commande à gauche en arrière plan. |
$$ | Identifiant (PID) du processus en cours d’exécution. |
$PPID | Identifiant (PID) du processus père du processus en cours d’exécution. |
$! | Identifiant (PID) du dernier processus lancé en arrière plan. |
$? | Valeur de retour de la dernière commande exécutée en premier plan. |
exit [n] | Interrompre l’exécution d’un script avec la valeur de retour n. Par convention, une commande renvoie une valeur différente de 0 en cas d'erreur et 0 sinon. |
export var | Crée une copie de la variable var lorsque le processus engendre des enfants. La variable sera aussi exportée par les enfants. |
wait [n1 n2 ...] | Bloque le processus courant tant que les fils dont les identifiants sont passés en paramètre ne sont pas terminés. Si aucun paramètre n’est donné, le processus attend la fin de tous ses fils. |
$(xyz) | Le shell substitue à $(xyz) le texte produit sur la sortie standard par l’exécution de la commande xyz. |
ps [opt] |
Affiche la liste des processus en cours d'exécution.
Quelques options pour opt :
|
pstree | Affiche l'arborescence des processus. |
top | Fournie une vue dynamique temps réel des processus en cours d'exécution. |
Arguments |
|
$# | Nombre de paramètres de la ligne de commande. |
$n avec n ∈ [0,9] | Valeur du ne paramètre. $0 correspond au nom de la commande invoquée. $n correspond à la chaîne vide s’il y a moins de n paramètres. |
"$@" | Donne l'ensemble des paramètres à partir de $1 en préservant les espaces à l'intérieur de chaque paramètre. Équivalent à écrire "$1" "$2" .... |
shift [n] | Décale les paramètres du script de n positions vers la gauche (n = 1 si absent). Par exemple, dans le cas où n n'est pas spécifié, $2 devient $1, $3 devient $2, etc. $0 est perdu. Si n est plus grand que le nombre d'arguments restant, shift ne fait rien. |
Chaînes et protections de caractères |
|
\x | Un \ protège (« échappe ») n’importe quel caractère ayant normalement un sens particulier pour le shell. Par exemple, \* est interprété comme le caractère * et non comme le motif *. \\ correspond au caractère \. |
"xyz" | Protège la chaîne xyz du découpage sur les espaces lors de la séparation des arguments. Empêche l’interprétation des méta-caractères du langage, sauf $, ` et \. En particulier, les variables ($mavar) et les substitutions de commandes ($(xyz)) sont interprétées. |
'xyz' | Protège la chaîne xyz du découpage, comme les guillemets, mais n’effectue aucune substitution. Aucun caractère autre que ' n’a de sens particulier dans une chaîne entre apostrophes, pas même \. |
Tests |
|
[ -z ch1 ] | Renvoie vrai si la chaîne de caractères ch1 est vide. |
[ -n ch1 ] | Renvoie vrai si la chaîne de caractères ch1 est non vide. |
[ ch1 = ch2 ] | Renvoie vrai si les chaînes de caractères ch1 et ch2 sont égales. |
[ ch1 != ch2 ] | Renvoie vrai si les chaînes de caractères ch1 et ch2 sont différentes. |
[ n1 -eq n2 ] | Renvoie vrai si les nombres n1 et n2 sont égaux. Par exemple, [ "01" -eq "1" ] renvoie vrai puisque les nombres sont égaux, alors que [ "01" = "1" ] renvoie faux puisque les chaînes de caractères sont différentes. |
[ n1 -ne n2 ] | Renvoie vrai si les nombres n1 et n2 sont différents. |
[ n1 -lt n2 ] | Renvoie vrai si le nombre n1 est strictement inférieur au nombre n2. |
[ n1 -le n2 ] | Renvoie vrai si le nombre n1 est inférieur ou égal au nombre n2. |
[ n1 -gt n2 ] | Renvoie vrai si le nombre n1 est strictement supérieur au nombre n2. |
[ n1 -ge n2 ] | Renvoie vrai si le nombre n1 est supérieur ou égal au nombre n2. |
[ -e chemin ] | Renvoie vrai si le chemin chemin existe dans le système de fichier (fichier, répertoire, lien symbolique…). |
[ -f chemin ] | Renvoie vrai si chemin correspond à un fichier. |
[ -d chemin ] | Renvoie vrai si chemin correspond à un répertoire. |
[ -L chemin ] | Renvoie vrai si chemin correspond à un lien symbolique. |
! test | Renvoie vrai si test renvoie faux. Par exemple ! [ 42 -eq 67 ] renvoie vrai. |
test1 && test2 | Renvoie vrai si test1 et test2 renvoie vrai. |
test1 || test2 | Renvoie vrai si test1 ou test2 renvoie vrai. |
Structures de contrôle |
|
if test1; then
corps1
elif test2; then
corps2
else
corps3
fi |
Execute corps1 si le test test1 renvoie vrai. Dans le cas où test1 renvoie faux, exécute corps2 si test2 renvoie vrai et corps3 sinon. Les parties elif et else sont optionnelles. |
while test; do
corps
done |
Execute corps tant que le test test renvoie vrai. |
for var in liste; do
corps
done |
Pour var prenant successivement les différentes valeurs de la liste (une liste est une suite de mots séparés par des espaces), exécute corps. |
case $var in
motif1) corps1;;
motif2) corps2;;
...
motifn) corpsn;;
esac |
Trouve le premier motif correspondant à $var et exécute le corps associé. |
( cmd ) |
Permet de regrouper des commandes.
Utile pour donner des priorités aux opérateurs !, || et && dans
les tests.
Par exemple [ 42 -eq 65 ] || ( [ 65 -eq 65 ] && [ 63 -eq 63 ] ) renvoie vrai.
Peut aussi être utilisé pour rediriger les entrées/sorties de plusieurs commandes simultanément.
Par exemple ( ls; cat /etc/passwd ) > fic.
La construction ( cmd ) lance cmd dans un sous-processus.
|
Communication et contrôle des processus |
|
| | Tube de communication anonyme entre deux processus : connecte la sortie standard de la commande de gauche à l’entrée standard de la commande de droite. |
kill -sig pid | Envoie le signal sig (sig est un numéro ou un nom de signal, avec ou sans le SIG de début de chaîne) au processus d’identifiant pid. |
kill –l | Donne la liste des signaux (nom et valeur numérique). |
trap [arg] sig | Exécute arg lors du traitement du signal sig (sig est un numéro ou un nom de signal, avec ou sans le SIG de début de chaîne). Si arg est une chaîne vide, le signal est ignoré. Si arg est absent, le traitement par défaut du signal est rétabli. |
mkfifo chemin | Crée le tube nommé de nom chemin. |
sleep n | Endort le processus n secondes. |