Vous êtes sur la page 1sur 4

Département R & T Rushed.Kanawati@lipn.univ-paris13.

fr

Module I1 - Introduction aux systèmes informatiques

TP 6 : Introduction à la programmation de scripts shell


5 novembre 2012

1 Gestion d’un drapeau


Un drapeau est un simple fichier texte qui peut contenir une seule valeur 1
ou 0. Le drapeau est positionné si le fichier contient la valeur 1. On voudrais
développer une commande nommée flag qui a le fonctionnement suivant :

n
– flag <nom_du_drapeau> : retourne l’état actuel du drapeau si le fichier
correspondant n’existe pas on affiche un message d’erreur.

o
– flag <nom_du_drapeau> on : positionne le drapeau (i.e. mettre dans le

i
fichier correspondant la valeur 1). Si le fichier n’existe pas la commande
crée le fichier.

t
– flag <nom_du_drapeau> off : enlève le drapeau (i.e. mettre dans le fi-
chier correspondant la valeur 0). Si le fichier n’existe pas la commande

c
crée le fichier.
– flag <nom_du_drapeau> flop : inverse l’état du drapeau. Si le fichier

e
correspondant n’existe pas alors on affiche un message d’erreur.

r
#!/bin/bash

C
error(){

o
#

case "$#" in
"1") #
r
# Fonction d’affichage de message d’erreur
#
echo "usage : $1 flag_name [on | off | flop]"

# cas où il existe un seul argument


#
if [ -f $1 ] # l’argument fourni représente un fichier existant
then
cat "$1" # afficher le fichier
else
error $0
fi
;;
"2") #
# cas de deux arguments
#
case "$2" in
"on")

1
Département R & T Rushed.Kanawati@lipn.univ-paris13.fr

echo "1" > "$1"


#
# Noter que si le fichier n’existe pas il sera créé
#
;;
"off")
echo "0" > "$1"
;;
"flop") #
# ici il faut tester l’existence du fichier drapeau
#
if [ -f "$1" ]

n
then
if [ ‘cat $1‘ -eq "1" ]

o
# Noter l’emploi de ‘ pour récupérer le résultat de la commande cat
then

i
echo "0" > "$1"

t
else
echo "0" > "$1"

c
fi
else
error $0

e
fi

r
;;
*)

r
error $0
esac

o
;;
*)
error $0
;;

C
esac

2 Gestion de sauvegarde
1. Ecrire un programme shell nommé saveTxt qui permet de copier tous
les fichiers dans le compte utilisateur (e.g. compte étudiant) et qui se
terminent par le suffixe .txt dans un répertoire nommé ∼/.backup. Si le
répertoire .backup n’existe pas alors la commande doit le créer.
#!/bin/bash

if [ ! -d ~/.backup ] # si le répertoire ~/.backup n’existe pas il faut le créer


then
mkdir ~/backup
fi
find ~ -name "*.txt" -exec cp {} ~/backup \;
2. Modifier le programme précédent afin de ne pas écraser les fichiers exis-
tants dans le répertoire backup.

2
Département R & T Rushed.Kanawati@lipn.univ-paris13.fr

#!/bin/bash

copier() {
#
# Cette fonction copie le fichier passé en argument dans ~/.backup
# s’il n’existe pas déjà dans .backup
#
f=‘basename $1‘ # récupérer le nom du fichier sans le chemin
if [ ! -e "~/.backup/$f" ]
then
cp $1 ~/.backup

n
fi
}

o
if [ ! -d ~/.backip ] # si le répertoire ~/.backup n’existe pas il faut le créer

i
then

t
mkdir ~/.backup
fi

c
find . -name "*.txt" -exec ./copier {} \;
# noter l’utilisation de la fonction copier

3 Poubelle

r r e
Développer une commande nommée poubelle qui permet de transférer les
fichiers à effacer dans un répertoire nommé trash. La syntaxe de cette com-

o
mande est la suivante :
1. poubelle f1 f2 f3 . . . fn a pour effet de transférer les fichiers f1 à fn
dans le répertoire trash.

C
2. poubelle -f a pour effet d’effacer le contenu du répertoire .trash.
3. poubelle a pour effet d’afficher un message d’aide décrivant la syntaxe
correcte de la commande.

#!/bin/bash

if [ ! -e ~/.trash ] # si le répertoire .trash n’existe pas on le crée


then
mkdir ~/.trash
fi

case "$#" in
0) #
# Si il y a aucun argument alors afficher un message d’erreur
#
echo "usage: $0 target_files"
echo " $0 -f "
;;

3
Département R & T Rushed.Kanawati@lipn.univ-paris13.fr

*) # si il y a des arguments
if [ "$1" = "-f" ] # si le premier argument set -f alors effacer le contenu de .t
then
rm -r ~/.trash/*
else # sinon déplacer les fichiers cités en arguments vers .trash
mv $@ ~/.trash
fi
;;
esac

ti o n
r r e c
C o
4

Vous aimerez peut-être aussi