Mise à jour : Debian 10.0 Buster
Sommaire
Le conditionnement des opérations en fonction des résultats d'un test peut s'effectuer
$ <test> && ..... || .....
par exemple
$ blkid && .... || .....
$ [[ 4 = 8 ]] && ...... || ..........
$ if <test>; then .... ; else ..... ; fi
par exemple
$ if lsblk; then ....; else ....., fi
$ if [[ 4 = 8 ]]; then .....; else ..........;fi
Principe
A && B Exécuter B si A réussit
A || B Exécuter B si A échoue
A && B || C Exécuter B si A réussit, exécuter C si A échoue
Exemple
$ [[ 5 = 8 ]] && echo "5 = 8 vrai" || echo "5 = 8 faux"
5 = 8 faux
if test; then
Commande_à_effectuer_si_test_réussit
else
Commande_à_effectuer_si_test_échoue
fi
$ if [[ 5 = 8 ]]; then echo 5 = 8 vrai; else echo 5 = 8 faux; fi
5 = 8 faux
$ case $Variable in valeur1) Commande_1;; valeur2) Commande_2;; valeur3) Commande_3;;
....
*) Commande pour toute autre valeur);; esac
$ read a;case "$a" in 1) echo un;; 2) echo deux;; 3) echo trois;; *) echo inconnu;; esac
1
un
$ read a;case "$a" in 1) echo un;; 2) echo deux;; 3) echo trois;; *) echo inconnu;; esac
3
trois
$ read a;case "$a" in 1) echo un;; 2) echo deux;; 3) echo trois;; *) echo inconnu;; esac
5
inconnu
Principe: Effectuer une commande pour les valeurs d'une liste
for Liste
do Commande_à_effectuer
done
Exemples de liste
Nombres compris entre une première valeur et une dernière valeur
$ for i in {1..4} ; do echo $i ;done
1
2
3
4
# Incrément de 1 $ for ((i = 1; i <= 10; i++)); do echo $i; done
1
2
3
4
....
# Décrément de 1
$ for ((i = 10; i >= 1; i--)); do echo $i;done
10
9
8
7
...
# Incrément de 3
$ for ((i = 1; i <= 10; i+=3)); do echo $i; done
1
4
7
10
# Multiplication par 2
$ for ((i = 1; i <= 10; i*=2)); do echo $i; done
1
2
4
8
# Progression définie par une formule de calcul
$ for ((i = 1; i <= 160; i = 5*i+2)); do echo $i; done
1
7
37
$ for i in {f..j}; do echo $i ;done
f
g
h
i
j
$ for i in {1,5,z,T}; do echo $i; done
1
5
z
T
$ for i in *d*;do echo $i;done
data
Downloads
nuc_buster_luksheader_BU
nuc_data_luksheader_BU
$ for i in $(date) ;do echo $i;done
mercredi
11
décembre
2019,
12:30:33
(UTC+0100)
$ for i in $(echo ceci est une longue histoire);do echo $i;done
ceci
est
une
longue
histoire
$ for i in $(cat /etc/apt/sources.list);do echo $i;done
#
buster
deb
http://deb.debian.org/debian/
buster
main
non-free
contrib
deb-src
......
Note : les caractères espace, les lignes blanches, les caractères de fin de ligne sont supprimées dans la lecture par mots
$ cat /etc/apt/sources.list |while IFS= read -r line; do printf "%s\n" "$line";done
# bullseye
deb http://deb.debian.org/debian/ bullseye main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye main non-free contrib
# bullseye-updates, previously known as 'volatile
.....
Note : les caractères espace, les lignes blanches
while Test; do
Commande_à_effectuer_tant_que_le_test_réussit
done
Exemples
$ a=0;while [[ $a -lt 10 ]];do read -p "Entrer un nombre " a; done
2
5
8
12
$ cat /etc/apt/sources.list |while read i ; do echo $i ;done
# buster
deb http://deb.debian.org/debian/ buster main non-free contrib
deb-src http://deb.debian.org/debian/ buster main non-free contrib
....
until Test; do
Commande_à_effectuer_tant_que_le_test_ne_réussit_pas
done
$ a=20;until [[ "$a" -lt 10 ]];do read -p "Entrer un nombre " a; done
15
12
8
$ while true; do break; done
$ while true; do while true; do break 2;done;done
La commande continue permet de passer directement à la boucle suivante, sans exécuter le reste de la boucle
$ for i in {0..9};do { (( $i < 5 )) && continue; echo "$i - Fin de la boucle"; }; done
5 - Fin de la boucle
6 - Fin de la boucle
7 - Fin de la boucle
8 - Fin de la boucle
9 - Fin de la boucle