1 Gestion d`un drapeau

Transcription

1 Gestion d`un drapeau
Département R & T
[email protected]
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 :
– flag <nom_du_drapeau> : retourne l’état actuel du drapeau si le fichier
correspondant n’existe pas on affiche un message d’erreur.
– flag <nom_du_drapeau> on : positionne le drapeau (i.e. mettre dans le
fichier correspondant la valeur 1). Si le fichier n’existe pas la commande
crée le fichier.
– flag <nom_du_drapeau> off : enlève le drapeau (i.e. mettre dans le fichier correspondant la valeur 0). Si le fichier n’existe pas la commande
crée le fichier.
– flag <nom_du_drapeau> flop : inverse l’état du drapeau. Si le fichier
correspondant n’existe pas alors on affiche un message d’erreur.
c
e
r
r
#!/bin/bash
error(){
n
o
i
t
o
C
#
# Fonction d’affichage de message d’erreur
#
echo "usage : $1 flag_name [on | off | flop]"
}
case "$#" in
"1")
#
# 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
[email protected]
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" ]
then
if [ ‘cat $1‘ -eq "1" ]
# Noter l’emploi de ‘ pour récupérer le résultat de la commande cat
then
echo "0" > "$1"
else
echo "0" > "$1"
fi
else
error $0
fi
;;
*)
error $0
esac
;;
n
o
i
t
c
e
r
r
o
C
*)
error $0
;;
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 existants dans le répertoire backup.
2
Département R & T
[email protected]
#!/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
fi
n
o
i
t
}
if [ ! -d ~/.backip ] # si le répertoire ~/.backup n’existe pas il faut le créer
then
mkdir ~/.backup
fi
c
e
r
r
find . -name "*.txt" -exec ./copier {} \;
# noter l’utilisation de la fonction copier
3
Poubelle
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 commande est la suivante :
o
C
1. poubelle f1 f2 f3 . . . fn a pour effet de transférer les fichiers f1 à fn
dans le répertoire trash.
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 "$#"
0)
#
# Si
#
echo
echo
;;
in
il y a aucun argument alors afficher un message d’erreur
"usage: $0 target_files"
"
$0 -f
"
3
Département R & T
[email protected]
*)
# 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
n
o
i
t
c
e
r
r
o
C
4