case et loop - part2
case
case word in patterns ) commands ;; esac
ex 1
#!/bin/bash echo -n "Tappe un chiffre ou une lettre > " read character case $character in # Check for letters [[:lower:]] | [[:upper:]] ) echo "You typed the letter $character" ;; # Check for digits [0-9] ) echo "You typed the digit $character" ;; # Check for anything else * ) echo "You did not type a letter or a digit" esac
* si aucun autre n'a matché (reste des solutions)
Boucles (loop) : while, until et for
https://www.gnu.org/software/bash/manual/bash.html#Looping-Constructs
syntaxe | ex simple |
---|---|
for variable in words; do commands done |
count=0 for i in $(cat ~/.bash_profile); do count=$((count + 1)) echo "Word $count ($i) contains $(echo -n $i | wc -c) characters" done |
until test-commands; do consequent-commands; done -> tourne si test-commands retourne statut exit <> 0 |
|
while test-commands; do consequent-commands; done -> tourne si test-commands retourne statut exit = 0 |
for
La variable shell $@ a la liste des arguments passés en ligne de commande est souvent utilisée pour traiter une liste de fichiers :
#!/bin/bash
for filename in "$@"; do
result=
if [ -f "$filename" ]; then
result="$filename is a regular file"
else
if [ -d "$filename" ]; then
result="$filename is a directory"
fi
fi
if [ -w "$filename" ]; then
result="$result and it is writable"
else
result="$result and it is not writable"
fi
echo "$result"
done