#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
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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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"
Rien de plus à ajouter, les commentaires de nesthib sont tout à fait pertinents comme toujours
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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