Comment dans un script shell accède - t -on aux différent argument ?
$0, $1, . . . accès aux arguments
$# nombre d’arguments
$$ PID du shell
$! PID du dernier processus lancé en arrière-plan
$? code de retour de la commande précédente
Quelle est la syntaxe de la structure conditionelle “if” en shell et comment fonctionne -t -elle ?
Syntaxe :
if cmd args
then
…
else
…
fi
Fonctionnement :
*Test effectué par la commande cmd
n’importe quelle commande (ou groupe de commandes)
*code de retour = 0 ⇝ branche then exécutée
*code de retour̸ = 0 ⇝ branche else exécutée
*Branche else facultative
*Syntaxe sur une seule ligne possible ne pas oublier les ;
Quelle est la syntaxe des switch case en shell ? COmment fonctionne - t - elle ?
Syntaxe :
case value in
pattern1)
…
;;
pattern2|pattern3)
…
;;
…
esac
Fonctionnement :
1) Pour la valeur :
*variable $VAR
*texte
*résultat d’un calcul $(( ))
*résultat d’une sous-commande $( )
2) Pour les motifs : pattern
~ = HOME si en début de motif
? = 1 caractère
* = 0 ou plusieurs caractères
[m1 . . . mk ] = un carac. parmi les mi
* Seule la première branche
valide est exécutée
QUelle est la syntaxe des “While” en shell comment fonctionnent - t - ils ?
Syntaxe :
while cmd args ;
do
…
done
Fonctionnement :
*Test effectué par la commande cmd
*n’importe quelle commande (ou groupe de commandes)
*code de retour = 0 ⇝ corps de boucle exécuté + nouveau test
*code de retour̸ = 0 ⇝ sortie de boucle
Syntaxe sur une seule ligne possible
!!!!!! ne pas oublier les ; !!!!!
*break = saut à la sortie de boucle
*continue = saut au niveau du test
QUelle est la syntaxe des “For” en shell comment fonctionnent - t - ils ?
Syntaxe :
for var in list
do
…
done
Fonctionnement :
*Pas de $ entre for et in
*var prend successivement chacune des valeurs données dans list :
suite de motifs séparés par des blancs
*résultat d’une sous-commande $( )
*Syntaxe sur une seule ligne possible ne pas oublier les ;
*break = saut à la sortie de boucle
*continue = passage à la prochaine valeur directement
Que fais la fonction “test” ?
test arg1 arg2 … argk
Expression booléenne donnée par arg1 arg2 . . . argk évaluée
⇝ code de retour =
0 si expression évaluée à vrai
1 sinon
Avec la fonction “test” quels sont les argument pour effectuer des comparaisons sur les chaine de caractère ?
Comparaison de deux chaînes : str1 ⋄ str2
= pour égalité
!= pour différence
< pour inférieur (strict) lexicographiquement
> pour supérieur (strict) lexicographiquement
Test de vacuité : ⋄ str
-z pour tester si la chaîne est vide
-n pour tester si la chaîne est non vide
Avec la fonction “test” quels sont les argument pour effectuer des comparaisons sur les entiers ?
Comparaison de deux entiers : int1 ⋄ int2
-eq pour égalité
-ne pour différence
-lt pour inférieur strict
-le pour inférieur ou égal
-gt pour supérieur strict
-ge pour supérieur ou égal
Quels sont les autres options interessantes pour la fonction “test” ?
Vérifier la nature d’un fichier : ⋄ file
-e pour existence
-f pour vérifier que file est un fichier régulier
-d pour vérifier que file est un répertoire
-h pour vérifier que file est un lien symbolique
Vérifier les droits sur un fichier : ⋄ file
-r pour accès en lecture
-w pour accès en écriture
-x pour accès en exécution
Donner en shell les opérateurs booleans
! expr négation de expr
ne pas oublier les espaces autour de !
expr1 -o expr2 OU logique
expr1 -a expr2 ET logique
( expr ) pour parenthéser si besoin
Quelles sont les commandes built-in en shell ?
Commandes built-in
Commande built-in = fournie par le shell
pas d’exécutable dans le PATH en général
documentation dans le man du shell
cd, pwd, export, fg, bg
mais pas ls, find, firefox
Certaines commandes sont recodées dans le shell :
+ d’options supportées
meilleures perfs
echo, test
Comment fonctionne en shell la commande built-in “read” ?
sh$ read var1 … vark
sh$ read -p message var1 … vark
lecture d’une ligne sur stdin
découpage de cette ligne selon les blancs espace, tab
vari reçoit le ie mot (s’il existe) 1 ≤ i < k
vark reçoit le reste de la ligne
Comment fonctionne en shell les commandes built-in principales ?
exec cmd args
exécute la commande cmd avec les arguments args
le shell est remplacé par cmd
pas de nouveau processus
exit n
*arrête le shell avec n comme code de retour
*code de retour = 0 si omis
readonly v
*la variable v devient non modifiable
unset v
*supprime la variable v
set ±opt args
*1 change les options du shell
*2 change les arguments $1, $2, . . .
shift n
*décale les arguments de n crans
*décalage de 1 par défaut $2 devient $1, etc.
. file . = source, en mode interactif
*le contenu de file est exécuté
wait pid
*attend l’arrêt du programme de PID pid
Quelle est la syntaxe pour créer ses propres fonctions en shell ?
Syntaxe :
fctname() {
local var
cmd1 args1
cmd2 args2
…
return n
}
Fonctionnement :
Gestion des arguments :
*aucune déclaration entre les ( )
*accès via $1, $2, . . .
Variables globales accessibles $VAR
Mot-clé local pour déclarer des variables locales
Mot-clé return pour sortir de la fonction
*en précisant le code retour n
si aucun return, code de retour = celui de la
*dernière commande exécutée
*ne pas confondre avec exit
Quelles sont els variables spéciales pour les commandes en shell ?
$i
*accès à l’argument numéro i
*mettre des { } à partir de 10 ${10}, ${11}, . . .
#et trouver une bonne raison d’avoir autant d’arguments !
$#
*donne le nombre d’arguments
*utile dans les tests
”$@”
*remplacé par la liste des arguments
gestion correcte des espaces pas comme $ et $@
*utile dans les tests
#même comportement au niveau du shell et dans une fonction
sauf pour $0