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