Les instructions
Les commandes if , while , until teste le status de la commande. (voir le man pour determiner le status renvoyé par une commande particuliere, en géneral si la commande s'execute correctement, le status est vrai)
Attention mettre une négation devant la commande (if ! cmde) ne permet pas de tester l'échec de la commande car la négation s'applique au résultat de la commande et non pas à son status.
Dans cette optique, le test est considéré comme une commande, on peut d'ailleurs l'utiliser sur une ligne de commande.
La variable para prend successivement les valeurs de la liste
si la liste est omise, para prend alors les valeurs passées en paramètres du script
test expr ou [ expr ] (Attention il faut un espace apres [ et avant ])
ou expr vaut :
l'expression est une commande donc pour affecter une opération à une variable, il faut forcer son exécution :
Attention mettre une négation devant la commande (if ! cmde) ne permet pas de tester l'échec de la commande car la négation s'applique au résultat de la commande et non pas à son status.
Dans cette optique, le test est considéré comme une commande, on peut d'ailleurs l'utiliser sur une ligne de commande.
Syntaxe
if cmde then liste_commandes [elif liste_commandes then liste_commandes] ... [else liste_commandes] fi
Exemples
if test -f $1 then file $1 else echo " le fichier n'existe pas " fi
if grep jean personnel then echo jean >> disponible elif grep pierre personnel then echo pierre >> disponible else echo vide >> disponible fi
Syntaxe
while commande do liste_commandes done
Exemple
while [ -r " $1 " ] do cat $1 >> concat shift done
Syntaxe
until commande do liste_commandes done
Exemple
until [ ! -r " $1 " ] do cat $1 >> concat shift done
Syntaxe
case para in choix1[|choix2] ... ) liste_commandes ;; esac
Exemple
case $1 in -d | -r ) rmdir $dir echo "option -d ou -r ";; -o ) echo "option -o ";; * ) echo "réponse incorrecte ";; esac
Syntaxe
for para [in liste] do liste_commandes done
La variable para prend successivement les valeurs de la liste
si la liste est omise, para prend alors les valeurs passées en paramètres du script
Exemples
for i in `ls` do cp $i /dir/$i echo "$i copie " doneN'oublier pas les ` qui force l'exécution du ls.
for dir in /dev /usr /users/bin /lib do num=`ls $dir|wc -w` echo "$num fichiers dans $dir " done
for i do echo $i doneN'oubliez pas que le test est une commande qui peut être exécutée directement sur la ligne de commande
test expr ou [ expr ] (Attention il faut un espace apres [ et avant ])
ou expr vaut :
| -r fichier | vrai si le fichier existe et est accessible en lecture (R) | |
| -w fichier | vrai si le fichier existe et est accessible en écriture (W) | |
| -x fichier | vrai si le fichier existe et est exécutable (X) | |
| -f fichier | vrai si le fichier existe et est un fichier régulier | |
| -d fichier | vrai si le fichier existe et est un répertoire | |
| -s fichier | vrai si le fichier existe et a une taille non nulle | |
| -H fichier | vrai si le fichier existe et est un répertoire caché | |
| -h fichier | vrai si le fichier existe et est un lien symbolique | |
| s1 = s2 | vrai si les deux expressions sont égales | |
| s1 != s2 | vrai si les deux expressions sont différentes | |
| s1 | vrai si s1 n'est pas la chaîne nulle | |
| e1 -eq e2 | vrai si les deux entiers e1 et e2 sont algébriquement égaux ( autres comparaisons : -ne , -gt , -ge , -lt , -le) | |
| ! | négation unaire | |
| -a | opération binaire ET | |
| -o | opération binaire OU |
divers
| # | commentaires , mais #!/bin/sh en début de fichier force l'exécution en Bourne Shell |
| ( cmde ) | exécute la commande dans un sous-shell |
| read a | lecture d'une entrée pendant l'exécution d'un script |
| exit num | renvoie le status de la commande (en général 0 la commande s'est bien exécutée) |
| return num | code d'erreur |
| . script | exécution du script dans le shell courant |
| eval arg | interprète arg avant de l'exécuter |
| cmd1 && cmd2 | séparateur conditionnel (cmd2 sera exécuté si cmd1 s'est exécuté correctement) |
| cmd1 || cmd2 | séparateur conditionnel (cmd2 sera exécuté si cmd1 ne s'est pas exécuté correctement) |
| nom_fonction () { liste_commandes ;} | définition d'une fonction |
| exec arg | exécute la commande dans un nouveau shell |
| set var | initialisation d'une variable liste de tous les paramètres du système positionne les paramètres $i ( set a b c positionne $1 à a, $2 à b et $3 à c) |
| unset var | raz d'une variable |
| type cmde | indique la localisation d'une commande |
| readonly var | empêche la modification d'une variable |
| expr exp op exp | exécute des opérations arithmétiques (op vaut : + , - , * , / , % , = , > , < , > = , < = , !=) |
| expr exp1 | exp2 | renvoie exp1 si l'expression n'est pas nulle, sinon exp2 |
| expr exp1 & exp2 | renvoie exp1 si l'expression n'est pas nulle, sinon exp2 |
| expr exp1 : exp2 | comparaison des deux arguments (renvoie le nombre de caractères en commun) |
| expr length exp | retourne le nombre de caractères de exp |
| expr substr exp n1 n2 | retourne une sous chaîne de exp commençant a la place n1 et de n2 caractères |
| expr index exp car | retourne la position du caractère car dans la chaîne exp |
l'expression est une commande donc pour affecter une opération à une variable, il faut forcer son exécution :
a=`expr $b + $c`
Publicité