PROFDINFO.COM

Votre enseignant d'informatique en ligne

Solution du labo 4

Retour à la page du cours

Voici des solutions possibles pour le laboratoire 4:

1- On modifie notre script de gestion pour utiliser un select pour gérer le menu.

PS3="Votre choix:  "
select CHOIX in "Creer un groupe" " Renommer un groupe" \
"Detruire un groupe" "Creer un usager" "Quitter"; do
   if [ "$CHOIX" == "Creer un groupe" ]; then
     echo -n "Nom du groupe a creer:  "
     read NOMGRP
     ./CreerGroupe $NOMGRP
   elif [ "$CHOIX" == "Renommer un groupe" ]; then
     echo -n "Nom actuel du groupe:  "
     read ANCNOM
     echo -n "Nouveau nom du groupe:  "
     read NOUVNOM
     ./RenommerGroupe $ANCNOM $NOUVNOM
   elif [ "$CHOIX" == "Detruire un groupe" ]; then
     echo -n "Nom du groupe:  "
     read NOMGRP
     echo -n "Detruire egalement le repertoire du groupe sous /home (o/n)?  "
     read CONFIRM
        if [ "$CONFIRM" == "o" ] || [ "$CONFIRM" == "O" ]; then
           ./DetruireGroupe -d $NOMGRP
        else
           ./DetruireGroupe $NOMGRP
        fi
   elif [ "$CHOIX" == "Creer un usager" ]; then
     echo -n "Nom de l'usager:  "
     read USER
     echo -n "Nom du groupe primaire (il sera cree si necessaire):  "
     read NOMGRP
     echo -n "Mot de passe:  "
     read PASSWD
     ./CreerUsager $NOMGRP $USER $PASSWD 
   elif [ "$CHOIX" == "Quitter" ]; then
     break
   else
      echo "Choix invalide, recommencez."
   fi
done

Le code reste donc sensiblement le même, à ces quelques différences près:

2- Les boucles qui comptent ne sont pas bien compliquées à faire et vous rappelleront sans doute le bon vieux temps du cours d'algorithmique. On accepte deux paramètres et la première chose à faire sera de les comparer entre eux pour savoir lequel est le plus grand. On comptera ensuite de $1 à $2, mais si $2 était le plus grand, on comptera normalement, sinon on comptera à rebours.

if [ $# -ne 2 ]; then
   echo "Usage: $0 nombre1 nombre2"
   exit 1
fi

COMPTEUR=$1
if [ $1 -lt $2 ]; then
   while [ $COMPTEUR -le $2 ]; do
      echo $COMPTEUR
      let COMPTEUR=COMPTEUR+1
   done
else
   until [ $COMPTEUR -lt $2 ]; do
      echo $COMPTEUR
      let COMPTEUR=COMPTEUR-1
   done
fi

Je me suis permis d'éliminer les mauvais usages avec un simple if qui teste si on a reçu 2 paramètres en commençant et qui termine le script quand ce n'est pas le cas.

Ensuite on initialise la variable COMPTEUR à la valeur du premier paramètre, puisqu'on devra le faire dans les deux cas, et on teste si on devra compter à rebours ou non. N'oublions pas d'utiliser un while pour compter en ordre ascendant et un until sinon, pour la forme. Il ne reste plus alors qu'à ne pas se mélanger avec les "-le" et "-lt" (question de ne pas oublier de chiffres) et d'utiliser judicieusement le let pour modifier le compteur.

3- Le script verify est assez simple aussi:

for FICHIER in $*; do
   if [ -e $FICHIER ]; then
      if [ -f $FICHIER ]; then
         echo "Le fichier $FICHIER existe"
      elif [ -d $FICHIER ]; then
         echo "Le repertoire $FICHIER existe"
      else
         echo "$FICHIER existe mais n'est ni un fichier ni un repertoire"
      fi
   else
      echo "$FICHIER n'existe pas"
   fi
done

Il nous suffit donc d'utiliser une boucle for, ou $* sera la liste de valeurs. $* contient effectivement la liste de tous les paramètres reçus, dans l'ordre. La variable FICHIER contiendra donc à chaque tour de boucle le paramètre suivant.

On commence par vérifier si le fichier existe. Si c'est le cas, on vérifie si c'est un fichier, sinon si c'est un répertoire, sinon, c'est nécessairement un fichier existant non identifié (comme /dev/null). Si le fichier n'existait pas au premier if, eh bien il n'existe pas.

4- Finalement, pour comprendre l'exemple donné dans les notes, il fallait savoir (ou trouver):

Retour à la page du cours