tp1
Ceci est une ancienne révision du document !
Table des matières
Rappels et premiers scripts
Durée
4 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/tp1
.
- Ecrivez un shell-script nommé “hello.sh” qui affiche “bonjour”
- Keys :
bash
,echo
,chmod
Exemple: $> ./hello.sh bonjour $>
- Quelques manipulations
- L'affectation de variable en shell-script doit se faire de la façon suivante
v=valeur
(Attention : jamais d'espace à gauche et à droite de l'espace). Sur la ligne de commande, tapezv=6
. Validez. Tapezecho $v
. Vous avez en votre possession l'outil d'affectation et de déréférencement d'une variable enbash
. - tapez maintenant
echo 5 > mavaleur5
, validez, puiscat mavaleur5
. Que constatez-vous ? - si vous tapez
echo $v
, vous devez toujours constater l'affichage de6
sur la sortie standard. Tapezv=`cat mavaleur5`
puisecho $v
. Que constatez-vous ? - tapez maintenant
echo 6 > > mavaleur5
, validez, puiscat mavaleur5
. Que constatez-vous ? - Tapez
v=`cat mavaleur5`
puisecho $v
. Que constatez-vous ?
- Ecrivez un shell-script nommé
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
(et0
sinon) si l'argument est un fichier inexistant, ou s'il ne s'agit pas d'un fichier régulier.- Keys :
$#
,$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 $>
- A partir de
check-arg.sh
, construisezcheck-multiple-args.sh
afin qu'il réalise le même traitement en admettant un nombre multiple de paramètres. Vous sortirez avec la valeur1
si au moins un des fichier passé en argument n'est pas régulier et0
sinon.- Keys :
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 $>
- Créez un dossier
test
. Danstest
, créez des fichiers textes (vides ou non) nommésfile1.txt
,file deux.txt
etfichier numero 3.txt
. Testez (et debuggez le cas échéant) votre scriptcheck-multiple-args.sh
avec ces fichiers en arguments. - Keys :
touch
,…
- Ecrire un shell-script admettant un nombre variable de nombres en paramètre et affichant le plus petit d’entre eux
- Ecrire un shell-script, créant dans le dossier courant s’il n’existe pas déjà, un répertoire dont le nom est passé en premier argument. Il créera dans ce dossier 10 fichiers nommés «
Un
» à «Dix
» contenant respectivement «file Un
» à «file Dix
»
- Ecrire un script nommé
table.sh
permettant l’affichage des 15 premières lignes de la table de multiplication d’un nombren
passé en paramètre.
- Complétez et exécutez le script suivant (que vous nommerez
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 parametre echo "nombre de ligne dans $1 : $l"
construction d'un splitter de fichiers
- A l'aide de la commande
wc
et des commandeshead
ettail
, proposez un scriptsplit-2.sh
qui permet la division d'un fichier texte passé en paramètre en deux parties de taille égales (le plus possible au moins). Le nom du fichier texte a diviser sera passé en paramètre (y compris avec une arborescence). Le préfixe des fichiers issus de la division sera le nom du fichier source. Les extensions des deux fichiers seront respectivement.sp1
et.sp2
- Keys :
head
,tail
,cat
,wc
,dirname
,basename
- Construisez la commande
group-2.sh
permettant la reconstruction à partir des fichiers issus desplit-2.sh
. Le scriptgroup-2.sh
admet un seul paramètre : le préfixe des fichiers constituant la source.- Keys :
head
,cat
, redirection destdout
uuencode/uudecode
uuencode [fichier] nom
: est utilisé pour encoder un fichier en n’utilisant que des caractèresASCII
7 bits (codes entre 0 et 127), par exemple pour le transmettre sur un réseau ne transmettant que les 7 bits de poids faible.uuencode
lit le fichier (oustdin
si l’on ne précise pas de nom) et écrit la version encodée sur la sortie standardstdout
. Le paramètrenom
précise le nom du fichier pour le décodage paruudecode
.uudecode [fichier]
: Décode un fichier encodé paruuencode
. Si l’argument fichier n’est pas spécifié,uudecode
litstdin
. Le nom du fichier résultat est précisé dans le codage (paramètrenom
deuuencode
).- Afin de vous exercer, réalisez un uuencodage d'un fichier de votre choix. Choisissez par exemple le fichier
vi-ref.pdf
disponible en annexe de la page du module de système d'exploitation. - On souhaite maintenant traiter les fichiers de nature binaire en plus des fichiers
ASCII
. Utilisezuuencode
etuudecode
pour adaptersplit-2.sh
dans ce but. Modifiezgroup-2.sh
en conséquence.- Keys :
uuencode
,uudecode
,head
,tail
,cat
,wc
- A partir de
split-2.sh
etgroup-2.sh
, construisezsplitter.sh
.splitter.sh
admettra un paramètre supplémentaire indiquant un nombre variable de parties issues de la division. La division devra se faire à part égales. Lorsque ce paramètre ne sera pas un nombre mais l'option-d
ou-g
,splitter.sh
procède à la reconstruction du fichier qui lui est passé en paramètre (qui est un préfixe dans ce cas).- Keys :
uuencode
,uudecode
,wc
,cat
,let
, redirection destdout
tp1.1547455177.txt.gz · Dernière modification : 2019/01/14 08:39 de gilles