Vous êtes sur la page 1sur 4

TP Programmation C & Systme

(TP 4)
2016/2017

a) Ecrire un shell script nomm answer qui affiche le texte dune question laquelle correspond une
rponse de type Oui ou Non. Si la rponse est Oui, le script doit retourner la valeur 0, par contre si
elle correspond Non la valeur de retour sera 1. Par contre si la rponse nest ni Oui, ni Non, la
question sera pose une nouvelle fois. Une rponse en minuscule est admise.
while true #On fait une boucle toujours vraie qui ne sort que si on donne une rponse
do
echo Est-il-Jeudi?
read Rep
if test $Rep = 'oui'

#On stocke la rponse dans Rep puis on teste

then echo 0
break
else
if test $Rep = 'non'
then echo 1
break
else :
fi
fi
done

b) Crez un shell script nomm copier qui reoit en argument deux noms de fichiers, la source et la
destination. Le script se termine et affiche un message derreur si lune des conditions suivantes est
ralise :
- Le nombre darguments est incorrect.
- Le fichier source nexiste pas ou il nest pas copiable (pas daccs en lecture).
- Le fichier source nest pas un fichier ordinaire.
- Le fichier destination existe.
- Le rpertoire de destination, que lon peut connatre avec la commande dirname, nest pas
accessible en criture.
- La copie a chou.

if test $# -ne 2
#On teste au debut si le nombre des arguments est correct
then echo erreur le nombre des arguments est incorrect
else
if (test ! -r $1) || (test ! -f $1) #on teste si le fichier existe et si on peut le lire et si il est ordinaire
then echo erreur le fichier n\'existe pas ou ne peut pas etre lu
else
if test -e $2 #on teste si le fichier destination existe
then echo erreur le fichier destination existe
else
if test ! -w `dirname $2`
then echo le rpertoire n\'est pas accessible en criture ou n\'existe pas
else
if cp $1 $2 1>/dev/null 2>/dev/null
then echo copie reussie
else echo copie choue
fi
fi
fi
fi
fi

c) Ecrire un shell script nomm verifier qui demande la saisie du nom dun utilisateur pour afficher
sur le stdout les informations qui lui sont associes et qui sont habituellement enregistres dans le
fichier /etc/passwd sous le format suivant:
Nom de l'utilisateur:
Identifiant de l'utilisateur:
Rpertoire HOME:
Type de shell utilis par dfaut:
Ce shell script doit afficher sur stderr un message derreur si le nom de cet utilisateur nexiste pas. Une
fois termin ce traitement, le script doit poser la question de savoir sil y a lieu de quitter ou recommencer
avec un autre nom saisir.
while true
do
echo donner un nom d\'utilisateur
read name
if test `grep $name /etc/passwd`
then
grep $name /etc/passwd > W
echo Nom d\'utilisateur: $name;
echo Identfiant de l\'utilisateur:
cat W| cut -d: -f3
echo HOME:
cat W| cut -d: -f6
echo Shell:
cat W| cut -d: -f7
else

echo le nom n\'existe pas.


fi
echo appuyer sur q pour quitter sinon appuyer sur une autre touche
read In
if test $In = 'q'
then
exit
else :
fi
done
d) Donnez une nouvelle version du script dvelopp ci-dessus, nomm verifer_v2 en utilisant la
commande awk. Cette commande permet de slectionner une ou plusieurs colonnes, comme le fait
la commande cut.
Exemple :
Pour afficher les identifiants des comptes UID ainsi que les noms de login associs :
$ cat /etc/passwd | awk F : {printf(%d\t%d\n,$3,$1) ;}
$1 fait rfrence llment de la premire colonne et $3 fait rfrence celui de la troisime
colonne.

while true
do
echo donner un nom d\'utilisateur
read name
if test `grep $name /etc/passwd`
then
grep $name /etc/passwd > W
echo Nom d\'utilisateur: $name;
echo Identfiant de l\'utilisateur:
cat /etc/passwd | grep $name | awk F : {printf(%d\t%d\n,$3,$1) ;}
echo HOME:
cat /etc/passwd | grep $name | awk F : {printf(%d\t%d\n,$6,$1) ;}
echo Shell:
cat /etc/passwd | grep $name | awk F : {printf(%d\t%d\n,$7,$1) ;}
else
echo le nom n\'existe pas.
fi
echo appuyer sur q pour quitter sinon appuyer sur une autre touche
read In
if test $In = 'q'
then
exit
else :
fi
done