PROFDINFO.COM

Votre enseignant d'informatique en ligne

Solution du labo 6

Retour à la page du cours

Voici une solution possible pour le laboratoire 6:

#!/bin/bash

# Éliminons d'abord les cas d'erreur...

# Pas le bon nombre de paramètres
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
  echo "Pas le bon nombre de parametres"
  exit 2
fi

#Bon nombre, mais pas de -i
if [ $# -eq 2 ] && [ "$1" != "-i" ];then
  echo "Utilisez -i"
  exit 2
fi

#Les erreurs de paramètres sont éliminées
#Ici, on sait qu'on a soit un paramètre,
#soit deux et le premier est -i.

#Conservons nos paramètres dans des variables
#pour simplifier le code à venir.
if [ $# -eq 1 ]; then
  FICHIER=$1
  CONF=0 #Un seul paramètre = pas de confirmation à demander
else
  FICHIER=$2
  CONF=1 #Deux paramètres = confirmation, vu qu'il y a un -i
fi

#Maintenant qu'on a le fichier de bien identifié, vérifions le cas
#d'erreur où le fichier n'existe pas.
if [ ! -f $FICHIER ]; then
   echo "Fichier $FICHIER inexistant"
   exit 1
fi

#Conservons le chemin vers le dossier de recyclage
#dans une variable au nom court pour simplifier le
#code à venir
BAC=$HOME/Recyclage

#Lecture du fichier de config
#Ce bloc (jusqu'au done) a été ajouté à la fin du
#processus de création du code et pourrait être enlevé.
#Tout le reste serait fonctionnel quand même
while read PARAM VALEUR
do
   if [ "$PARAM" == "recyclage" ]; then
      # Écrase la valeur par défaut de l'emplacement du bac
      BAC=$VALEUR
   fi
   if [ "$PARAM" == "confirme" ]; then
      # Écrase la valeur par défaut de confirmation
      if [ "$VALEUR" == "OUI" ]; then
         CONF=1
      elif [ "$VALEUR" == "NON" ]; then
         CONF=0
      fi
   fi
done < /etc/mydel.conf

#Création du bac s'il n'existe pas (on ne quitte pas)
if [ ! -d $BAC ]; then
  echo "Je cree $BAC"
  mkdir $BAC
fi

#La job de delete se fait réellement à partir d'ici.
#On a nos paramètres ($CONF et $FICHIER) ainsi que notre
#bac ($BAC) dans des variables et on a éliminé tous les
#cas d'erreur possible.  On se lance!
if [ $CONF -eq 1 ]; then #Confirmation à demander
   echo "Voulez-vous vraiment mettre $FICHIER au recyclage (o/n)?"
   read CHOIX
   if [ "$CHOIX" == "o" ]; then
      if [ -e $BAC/$FICHIER ]; then # On vérifie l'existence du fichier dans le bac
         echo "Vous allez ecraser un fichier du bac. Continuer (o/n)?"
         read CHOIX2
         if [ "$CHOIX2" == "o" ]; then
            mv -f "$FICHIER" $BAC
         else # Ne veut pas écraser
            echo "Operation annulee"
            exit 0 
         fi
      else #Fichier nouveau dans le bac
         mv -f "$FICHIER" $BAC 
      fi
   else #Ne veut pas effacer
      echo "Operation annulee"
      exit 0
   fi
else # Pas de confirmation à demander
   mv -f "$FICHIER" $BAC
fi 

Retour à la page du cours