Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/07/2013, à 01:54

black@leunix

[Résolu]Script nettoyage fichier

Quelqu'un pourrait m'aider a comprendre ce que sont que les balises "fi" dans ce script ?

Car j'ai beau essayer de chercher je n'en voit pas leurs utilités dans ce script. Suite a un test le terminal me répond :

 25: /home/n****/test.sh: Syntax error: "(" unexpected (expecting "fi")

Voici le script :

!#/bin/bash

echo "Saisissez le dossier dans lequel vous souhaitez supprimer les fichiers [chemin]."
read chemin
cd $chemin
if [$? = 1]
then
  echo "Le chemin est incorrect."
  echo "Vous vous situez dans le dossier suivant :"
  pwd
  echo "Ce script choisira le dossier dans lequel vous vous situez pas défaut. Continuer ? [o/n]
  read rep1
else
  rep1='o'
fi
if [$rep1 = 'o']
then
  echo "Supprimer les fichiers vieux de combien de temps ? [En nombre de jours]"
  read cbTemps
  find . -mtime +$cbTemps -print -exec rm "{}" \;
  if [$?=1]
  then
    echo "Une erreur est survenue. Interruption du script."
  else
    echo "Suppression des fichiers vieux de plus de $cbTemps jours) réussie. Interruption du script."
  fi
else
  echo "Interruption du script en cours."
fi

Merci par avance smile

Dernière modification par black@leunix (Le 07/07/2013, à 11:13)


Anyone who falls and gets up is much stronger that whoever never falls

Celui qui tombe et se releve est bien plus fort que celui qui ne tombe jamais

Hors ligne

#2 Le 07/07/2013, à 03:11

nesthib

Re : [Résolu]Script nettoyage fichier

fi est le mot clé qui définit la fin d'un bloc de test.
Un bloc de test est de la forme :

if [condition]
then
    [commandes si la condition est vraie]
elif [autre condition]
then
    [commandes si l'autre condition est vraie]
else
    [commandes si les conditions sont fausses]
fi

les sous blocs elif/then et else étant facultatifs.


Quelques erreurs dans le script :

  • ligne 1 → le shebang est « #! » et non pas « !# »

  • ligne 5 → la variable chemin devrait être entourées de guillemets doubles, sinon les noms de chemin avec espace poseront problème :

    cd "${chemin}"
  • ligne 11 → il manque un guillemet à la fin de la ligne (c'est ce qui pose le problème que tu rapportes, car le fi n'est jamais interprété comme mot clé) :

      echo "Ce script choisira le dossier dans lequel vous vous situez pas défaut. Continuer ? [o/n]"
  • partout → les conditions de test doivent comprendre des espaces après le mot clé « [ » :

    if [ $? = 1 ]

    ce qui, au passage, pourrait être avantageusement remplacé par un :

    if cd "$chemin"
    then
        …
    fi
  • partout → les constructions if/then/else/fi sont parfois un peu inutiles :

    find … && echo "Suppression des fichiers vieux de plus de $cbTemps jours) réussie. Interruption du script." || echo "Une erreur est survenue. Interruption du script."

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 07/07/2013, à 10:51

tiramiseb

Re : [Résolu]Script nettoyage fichier

Salut,

J'ajouterais, pour la culture générale du scripting, que "fi" marque la fin d'un bloc "if" comme "esac" marque la fin d'un bloc "case" smile

Rien de plus à ajouter, les commentaires de nesthib sont tout à fait pertinents comme toujours smile

Hors ligne

#4 Le 07/07/2013, à 11:13

black@leunix

Re : [Résolu]Script nettoyage fichier

Merci beaucoup à vous deux


Anyone who falls and gets up is much stronger that whoever never falls

Celui qui tombe et se releve est bien plus fort que celui qui ne tombe jamais

Hors ligne