Partie 1 ) Arguments d`un shell script 1.1) les variables d`un

Transcription

Partie 1 ) Arguments d`un shell script 1.1) les variables d`un
UTBM LO22 séance8 P05 Arguments/Paramètres du script et structure de contrôle if then...
EricBachard
Partie 1 ) Arguments d'un shell script
1.1) les variables d'un shell
Tout shell permet d'utiliser des variables. Le nom d'une variable est composé de lettres, de chiffres et
peut éventuellement commencer par le caractère _ (underscore). Mais le premier caractère ne peut pas
être un chiffre, et le nom ne peut pas contenir le caractère $ .
Affectation (valable en sh ou en bash) :
–
–
variable=chaîne
il ne doit pas y avoir d'espace ni avant, ni après le caractère égal
le contenu de variable est chaîne
Pour utiliser le contenu de variable, un utilise le préfixe $. Ainsi : echo $variable affichera ce que
contient variable.
N.B. : si variable n'est pas définie, son contenu, lors de son appel, sera mis à 0, sauf si le shell est lancé
avec l'option u (dans ce cas toute utilisation de variable non définie mettra fin au shell, avec une erreur).
1.2)Paramètres positionnels et arguments
Quand on exécute un shell script, on peut passer des arguments à ce shell script. Chaque argument est
séparé du suivant par un caractère espace.
Pour utiliser ces argument à l'intérieur même du shell script, on utilise :
$$ pour récupérer le PID su shell courant
$0 pour récupérer le nom de la commande, de la fonction ou le nom du script qui vient d'être lancé.
$1 son premier argument
$2 le second...
$n le nième argument, s'il existe
$@ tous les arguments, en un seul mot
$# : renvoit le nombre d'argument, mais ce n'est utilisable que dans une fonction.
N.B. : Pour obtenir un argument caractérisé par un nombre de 2 chiffres, il faut utiliser la syntaxe
suivante :
echo ${10} , par exemple, pour le 10ème argument.
Important : si le nombre de mots (séparés par des espaces ou des tabulations) est supérieur au nombre
d'arguments de la commande read, alors la variable correspondant au ddernier argument reçoit toute la
fin de la ligne.
Partie 2) Structure de contrôle de condition du type “if then...”
Dans un script, il est possible de structurer les commandes en effectuant des appels conditionnels.
Syntaxe :
1/3
UTBM LO22 séance8 P05 Arguments/Paramètres du script et structure de contrôle if then...
EricBachard
if condition1
then
liste_commandes1
elif condition2
then
liste_commandes2
else
liste_commandes3
fi
La condition 1 est exécutée. Il peut s'agir d'une commande composée quelconque, mais on emploie
souvent la commande [ ] pour vérifier une condition. Ensuite, le code de retour est examiné. S'il est
nul, alors la condition est considérée comme vraie, et la commande composée liste_commandes1 est
exécutée. Entraînant le contrôle est transféré à la fin de cette structure, c'est à dire après le fi.
Si le code de retour de condition1 est faux (non nul), cette condition est fausse. Et la condition2 est
testée. Si condition2 est vraie, liste_commandes2 est exécutée, puis le contrôle est transféré à la fin de
la structure, c'est à dire après le fi. Si condition2 est fausse, alors liste_commandes3 est exécutée, puis
sortie de cette structure, après le fi.
Remarques :
– Il est recommandé de suivre l'indentation de cet exemple. En effet, dans cet exemple, on voit
clairement ce qui dépend de quoi.
– Les conditions1 et condition2 doivent être des commandes. La commande la plus souvent utilisée est
la commande test. C'est la valeur du code de retour de cette commande qui est utilisée comme
booléen.
Exemple :
if [ $# -eq 1 ]
then
echo “le répertoire $1 a le contenu suivant : `ls $1`”
else
echo 'Mauvais nombre de paramètres !'
fi
Partie 3) Exercices pratiques
1) Fonction read et argument
Tester et expliquer le fonctionnement script suivant, en entrant trois ou quatre mots séparés par des
espaces :
#!/bin/bash
read a b
echo $a
echo $b
2/3
UTBM LO22 séance8 P05 Arguments/Paramètres du script et structure de contrôle if then...
EricBachard
2) Tester et expliquer ce que fait le script suivant :
#!/bin/bash
set `who`
echo $@
for i in $@
do
echo $i
done
3) Expliquer à quoi sert la commande basename. Que fait ce script ?
#!/bin/bash
echo `basename $0`
echo -e "\n\n\n"
echo -e "Argument passés en ligne de commande : $@\n"
echo -e "Nombre d'arguments en ligne de commande : $#\n"
echo -e "\n"
j=0
for i in $*
do
j=`expr $j + 1`
echo "argument $j : $i"
done
4) Ecrire un script qui permette d'afficher
–
–
–
–
le répertoire courant
le nom du script
la valeur retournée par echo `basename $0`
le nombre d'arguments
5) Expliquer complètement le fonctionnement de /usr/bin/any2pnm
6) Ecrire un script qui permet de savoir, pour chaque argument, si l'argument considéré est
un fichier normal, un lien symbolique, un répertoire, un fichier de type socket, de type caractère ou
bloc, s'il est autorisé en lecture, écriture et ou exécution.
3/3

Documents pareils

Le Shell

Le Shell Question Donner la réponse du Shell lorsque vous tapez les commandes suivantes dans une console : A=numero; echo $A echo $A1 echo ${A}1 B=`pwd`; echo $B echo le chemin est `pwd` echo le chemin est ...

Plus en détail