2 heures
Le but de ce TP est d'illustrer les principes vus en cours et en TD au travers d'un certains nombre d'exercices. Vous travaillerez dans un répertoire de votre compte nommé se1/tp-introduction
.
Pour mémoire un Shell-Script est un fichier texte qui est exécutable (i.e. dont les droits sont correctement positionnés) Ce fichier texte est une succession de commandes bash
- une commande par ligne - qui peuvent s'exécuter par lots. Par convention, la première ligne d'un Shell-Script sera : #!/bin/bash
. Cette ligne s'appelle le shebang
et spécifie, pour certains systèmes d'exploitation, l'interpréteur qui doit exécuter le code se trouvant en dessous. Vous retrouverez cette technique dans de nombreux langages tels que Perl
, Python
, etc.
Ainsi pour répondre à la question :
hello.sh
qui affiche bonjour
bash
, echo
, chmod
tel que l'on obtienne :
Exemple: $> ./hello.sh bonjour $>
#!/bin/bash echo 'bonjour'
hello.sh
chmod u+x ./hello.sh
./hello.sh
v=valeur
(Attention : jamais d'espace à gauche et à droite du caractère =
). Sur la ligne de commande, tapez v=6
. Validez. Tapez echo $v
. Vous avez en votre possession l'outil d'affectation et de déréférencement d'une variable en bash
.echo 5 > mavaleur5
, validezls mavaleur5
. Validez. Que constatez-vous ?cat mavaleur5
. Que constatez-vous ?echo $v
, vous devez toujours constater l'affichage de 6
sur la sortie standard. Tapez v=`cat mavaleur5`
puis echo $v
. Que constatez-vous ?echo 6 > > mavaleur5
, validez, puis cat mavaleur5
. Que constatez-vous ?v=`cat mavaleur5`
puis echo $v
. Que constatez-vous ?
Avec l'ensemble de ces commandes vous venez d'apprendre différentes façons d'affecter une variable bash
et d'accéder à son contenu.
manpages
comme élément de documentation de référence. Ainsi, la commande man bash
vous fournit une documentation exhaustive du shell de commandes bash
. Cette documentation vous permettra de prendre connaissance de toutes les subtilités du langage de script bash
. Cette documentation est dans le document fournit ici. Pour les questions suivantes, vous devez vous renseigner sur les variables d'environnement $#
, $0
, $1
, $2
, $?
, etc.check-arg.sh
qui vérifie qu'il a un argument passé en paramètre et que cet argument est un fichier régulier. Votre script s'échappera avec une erreur égale à 1
(et 0
sinon) si l'argument est un fichier inexistant, ou s'il ne s'agit pas d'un fichier régulier.$#
, $0
, $1
, test
, if
, [ … ]
, …
Exemple: $> ./check-args.sh vous n\'avez pas passé de paramètre ! $> ./check-args.sh fsdfdf fsdfdf n\'existe pas ou n\'est pas un fichier régulier $> ./check-args.sh /etc/hosts /etc/hosts existe, c\'est un fichier régulier $>
check-arg.sh
, construisez check-multiple-args.sh
afin qu'il réalise le même traitement en admettant un nombre multiple de paramètres. Vous sortirez avec la valeur 1
si au moins un des fichier passé en argument n'est pas régulier et 0
sinon. Pour ce faire, veuillez vous renseigner sur la nature de la variable $?
et sur la commande exit
.while
, $0
, $1
, test
, shift
, let
, …
Exemple: $> ./check-multiple-args.sh vous n\'avez pas passé de paramètre ! $> ./check-multiple-args.sh fsdfdf /etc/hosts check-args.sh fsdfdf n\'existe pas ou n\'est pas un fichier régulier /etc/hosts existe, c\'est un fichier régulier check-args.sh existe, c\'est un fichier régulier $>
test
. Dans test
, créez des fichiers textes (vides ou non) nommés file1.txt
, file deux.txt
et fichier numero 3.txt
. Testez (et debuggez le cas échéant) votre script check-multiple-args.sh
avec ces fichiers en arguments.touch
, …
test
, expr
, if … then … else … fi
, …
Un
» à « Dix
» contenant respectivement « file Un
» à « file Dix
»get-line.sh
) #!/bin/sh ## --- a completer : check des parametres ## --- a compléter : réaliser l'affectation de la variable 'l' a la valeur ## --- correspondant au nombre de lignes contenues dans le fichier passé en paramètre echo "nombre de ligne dans $1 : $l"