while condition do instruction(s) done
cat <<EOF +-----------------------------------------------------------------------------+ | LOGNAME: ${LOGNAME} | HOME: ${HOME} | BASH: ${BASH} | BASH_VERSION: ${BASH_VERSION} | LANG: ${LANG} | LC_ALL: ${LC_ALL} +-----------------------------------------------------------------------------+ EOF decision=0 while [ "${decision}" -ne 1 ]; do read -r -p "Please confirm? [Y/n] " user_input case $user_input in [yY][eE][sS]|[yY]) decision=1; echo "Yes";; [nN][oO]|[nN]) decision=1; echo "No"; exit 1;; *) echo "Invalid input...";; esac done +-----------------------------------------------------------------------------+ | LOGNAME: toto | HOME: /home/toto | BASH: /bin/bash | BASH_VERSION: 4.3.48(1)-release | LANG: en_US.UTF-8 | LC_ALL: en_US.UTF-8 +-----------------------------------------------------------------------------+ Please confirm? [Y/n] y Yes
#!/bin/bash while read -r line; do echo -e "$line\n" done < file.txt
#!/bin/bash while read -r user shell; do echo "user=${user} and shell=${shell}" done <<< "$(awk -F":" '{print $1,$7}' /etc/passwd)" user=root and shell=/bin/bash user=daemon and shell=/usr/sbin/nologin user=bin and shell=/usr/sbin/nologin user=sys and shell=/usr/sbin/nologin
for variable in liste_valeurs; do instruction(s) done #!/bin/bash semaine="samedi dimanche" for jour in ${semaine}; do echo "${jour}" done samedi dimanche
for ((e1;e2;e3)); do instruction(s) done Dans laquelle, e1, e2 et e3 sont des expressions arithmétiques. Une telle boucle commence par exécuter l'expression e1, puis tant que l'expression e2 est différente de zéro le bloc d'instructions est exécuté et l'expression e3 évaluée. #!/bin/bash for ((i=0 ; i<=20; i++)); do echo "i = ${i}" if [ `echo "${i} % 10" | bc` -eq 0 ]; then echo "i est un multiple de 10" fi done i = 0 i est un multiple de 10 i = 1 i = 2 i = 3 i = 4 i = 5 i = 6 i = 7 i = 8 i = 9 i = 10 i est un multiple de 10 i = 11 i = 12 i = 13 i = 14 i = 15 i = 16 i = 17 i = 18 i = 19 i = 20
La commande break permet de sortir d'une boucle. La commande continue permet de reprendre à la prochaine itération de la boucle.
while true; do read -r -p "Please confirm? [Y/n] " user_input case $user_input in [yY][eE][sS]|[yY]) echo "Yes"; break;; [nN][oO]|[nN]) echo "No"; exit 1;; *) echo "Invalid input..."; continue;; esac done