$$ | PID du processus Shell en cours |
$? | code retour de la dernière commande |
${#chaine} | taille de la variable $chaine |
$@ | tous les arguments vus comme des chaines séparés |
$# | nombre d'arguments sur la ligne de commande ou de paramètres de position |
$0, $1, $2, etc | paramètres de positions, passés à partir de la ligne de commande à un script, passés à une fonction, ou initialisés (set) à une variable $0 est le nom du script lui-même. |
$! | identifiant du processus (PID) du dernier job ayant fonctionné en tâche de fond |
${u:0:10} | sous-chaine de la variable u à partir de l'offset 0 pour une longueur de 10 |
"$IFS" | (Internal Field Separator) est une variable (obligatoirement être placées entre guillemets) spéciale définissant le "séparateur par défaut", c'est à dire le(s) caractère(s) utilisé(s) pour délimiter les mots dans une chaîne de caractères. Par défaut, ce séparateur est initialisé à <espace><tabulation><nouvelle ligne> |
if [ condition ]; then
echo "condition est VRAI"
fi |
if [ ! condition ]; then
echo "condition est FAUX"
fi |
command && command_if_true || { command_1_if_false; command_2_if_false; } |
if [ condition1 ]; then
echo "condition1 est VRAI"
elif [ condition2 ]; then
echo "condition1 est FAUX mais condition2 est VRAI"
else
echo "condition1 et condition2 sont FAUX"
fi |
if [ condition1 ] && [ condition2 ]; then
echo "condition1 ET condition2 sont VRAIs"
fi |
if [ condition1 ] || [ condition2 ]; then
echo "condition1 OU condition2 est VRAI"
fi |
#!/bin/bash
case $user_input in
[yY][eE][sS]|[yY]) echo "Yes"; break;;
[nN][oO]|[nN]) echo "No"; exit 1;;
*) echo "Invalid input..."; continue;;
esac |
#!/bin/bash
case "${return_val}" in
0) instruction_A
instruction_B
;;
1|2) instruction_C; continue;;
99) instruction_D; break;;
*) break;;
esac |
#!/bin/bash
case "$1" in
'start')
echo "Starting application"
/usr/bin/startpc
;;
'stop')
echo "Stopping application"
/usr/bin/stoppc
;;
'restart')
echo "Usage: $0 [start|stop]"
;;
esac |
commandA; commandB | exécute commandA et ensuite commandB, quelque-soit le succès de commandA |
commandA && commandB | exécute commandB si et seulement si commandA est réussi (code retour 0) |
commandA || commandB | exécute commandB si et seulement si commandA est un echec (code retour différent de 0) |
commandA && commandB || commandC | exécute commandB si et seulement si commandA est réussi (code retour 0) sinon exécute commandC |
commandA || (commandB && commandC) | exécute commandB et commandC si et seulement si commandA est en echec (code retour different de 0) |
Exemple:
root@ubuntu:~# /bin/ls -1 *.txt 1>/dev/null 2>&1 && echo "Ok, continuing" || { echo "Failed, exiting"; exit 1; }
est identique à
if /bin/ls -1 *.txt 1>/dev/null 2>&1; then
echo "Ok, continuing"
else
echo "Failed, exiting"
exit 1
fi |
Exemple: Tester le code retour d'une fonction
myfunc() {
echo "start myfunc()"
local l_params_array=($@)
echo "l_params_array=${l_params_array[@]}"
local l_cmd=${l_params_array[0]}
echo "l_cmd=${l_cmd}"
case "${l_cmd}" in
status)
echo "myfunc() status"
if ! my_condition; then
return 1
fi
;;
start)
echo "myfunc() start"
;;
stop)
echo "myfunc() stop"
;;
* ) echo "ERROR in myfunc(), usage: myfunc {status|start|stop}"; return 1;;
esac
return 0
}
if ! myfunc "wrong"; then
echo "Oops, something went wrong, let's stop now!"
fi
exit 0 |
[ -e file ] | vrai si file est un fichier |
[ -r file ] | vrai si file est un fichier ET lisible par le script |
[ -s file ] | vrai si file est un fichier ET d'une taille supérieure à zéro |
[ -w file ] | vrai si file est un fichier ET modifiable par le script |
[ -x file ] | vrai si file est un fichier ET executable par le script |
[ -d directory ] | vrai si directory est un répertoire |
[ -h objet ] | vrai si objet est un lien symbolique |
[ f1 -nt f2 ] | si f1 est plus récent que f2 |
[ f1 -ot f2 ] | si f1 est plus ancien que f2 |