Vous êtes sur la page 1sur 3

Initiation aux systèmes d’exploitation 2005-2006

TD N°: 6 – Initiation à la programmation shell

1) Ecrire le script helloWord qui affiche la chaîne de caractère "Bonjour!".

#!/bin/bash
echo Bonjour!

2) Ecrire le script monLs exécutant la commande ls -aCF.


Modifier le script de manière à ce que l'affichage soit en couleur. Modifier la variable
d'environnement PATH de manière à ce que le script monLs soit exécutable dans toute
l'arborescence.

#!/bin/bash
ls -aCF --color

3) Ecrire le shell variable qui définit une variable NOM. Dans le code, donner une valeur à cette
variable.
afficher le contenu de la variable.

#!/bin/bash
NOM=Belloir
echo la variable NOM a pour valeur $NOM

4) Ecrire le shell affichParam qui affiche son nom et son paramètre.


Exemple :
[scinfe100] affichParam hello
Je suis le script : affichParam
Mon premier parametre est : hello
[scinfe100]

Modifier le script pour affecter le paramètre à une variable interne. Puis afficher le contenu de
la variable.

#!/bin/bash
echo je suis le script : $0

echo mon premier parametre est : $1

#!/bin/bash
varinterne= $0
echo je suis le script : $ varinterne

echo mon premier parametre est : $1

5) Ecrire le shell estConnu qui teste si un utilisateur est connu par le système (vérification sur
/etc/passwd).
Initiation aux systèmes d’exploitation 2005-2006

#!/bin/bash
if [ $(grep $1 /etc/passwd) ]
then
echo utilisateur $1 connu du systeme
else
echo utilisateur $1 inconnu du systeme

fi

6) Tester le shell suivant en mode verbose et en mode trace. Que remarquez vous ?

#!/bin/bash
echo ""
echo "exemple de passage de parametre a un script"
echo ""
echo "le repertoire courant est : `pwd` "
echo ""
echo 'le repertoire courant est : `pwd`'
echo ""
echo "le repertoire courant est : pwd"
echo ""
echo ce script a pour nom $0
echo ""
echo "Au revoir $LOGNAME, le script est termine."

Regardez l’interprétation des commandes par rapport au source

7) Ecrire le script append permettant de concaténer deux fichiers après vérification. Ces
vérifications sont les suivantes : si le fichier cible n’existe pas, le fichier source est copié en
fichier cible. Si le fichier cible est protégé en écriture, le programme l’indique et ne fait rien
d’autre. Si le fichier source n’existe pas dans le répertoire ou est protégé en lecture, le
programme l’indique et ne fait rien d’autre.

#!/bin/bash
if [ $# -ne 2 ] ; then
echo nombre de parametre incorrect
echo $0 fichiersource fichiercible
elif [ ! -f $1 -o ! -r $1 ] ; then

if [ ! -f $1 ] ; then
echo le fichier source n existe pas
else
echo le fichier source est protege en lecture
fi
exit 1
elif [ -f $2 ] ; then
if [ ! -w $2 ] ; then
echo $2 protege en ecriture
exit 2
else
cat $1 >> $2
fi
else
cp $1 $2
fi

8) Ecrire le shell listeRep qui donne la liste des répertoires se trouvant dans le répertoire courant.
Initiation aux systèmes d’exploitation 2005-2006

#!/bin/bash

cd $1

echo la liste des repertoires du repertoire $1 est le suivante :


for ficcourant in *
if [ -d $ficcourant ] ; then
echo $ficcourant
fi
done

9) Ecrire le shell saisie qui demande à l'utilisateur de saisir une chaîne de caractère au clavier. Le
shell affiche alors la chaîne saisie par l'utilisateur.
Modifier le shell pour que l'utilisateur ne puisse entrer que « oui » ou « non » comme
réponse. Si ce n'est pas le cas, le shell demande a l'utilisateur de recommencer jusqu'à ce qu'il
entre « oui » ou « non » comme réponse. (Utiliser une boucle until).
Ensuite utilisez une boucle while.

#!/bin/bash
QUESTION='reponse (oui/non) ?'
echo -n $QUESTION
read REPONSE
#until test $REPONSE == oui -o $REPONSE == non ; do
while test $REPONSE != oui -a $REPONSE != non ; do
echo -n $QUESTION
read REPONSE
done

10) Créer un répertoire trashperso sous votre racine. Il servira de poubelle (au sens windows).
Créer le shell viderPoubelle qui effacera le contenu de ce répertoire de n'importe quel endroit
où vous vous trouverez connecté sous votre compte. Il demandera avant confirmation à
l'utilisateur. Créer le script poubelle qui efface un fichier ou un répertoire donné en le
déplaçant dans le répertoire trashperso.

#!/bin/bash

mv $* ~/trashperso

#!/bin/bash
QUESTION='Voulez vous vraiment vider la poubelle (oui/non) ?'
echo -n $QUESTION
read REPONSE
#until test $REPONSE == oui -o $REPONSE == non ; do
while test $REPONSE != oui -a $REPONSE != non ; do
echo -n $QUESTION
read REPONSE
done

if [ $REPONSE == oui ] ; then


rm -r -i ~/trashperso/*
fi