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
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 ...