Compter nombre de fichiers dans un répertoire [Shell/Bash] - Shell/Batch - Programmation
Marsh Posté le 18-09-2008 à 11:33:38
ReplyMarsh Posté le 18-09-2008 à 11:40:01
Elmoricq a écrit : man test |
Merci beaucoup, j'ai oublié de préciser, je sais y arriver comme cela puisque mon script fonctionnait auparavant mais en comptant que dans $MONREPERTOIRE, pas de la sous répertoire error.
|
Ce que je n'arrive pas c'est imbriqué tout ça avec le sous répertoire...
Marsh Posté le 18-09-2008 à 11:49:25
ReplyMarsh Posté le 18-09-2008 à 12:07:30
Elmoricq a écrit : Tu veux faire les deux tests en même temps, si j'ai bien compris ? |
Oui voila, faire les deux test, et obtenir :
- Un etat OK si les deux répertoire ne dépassent pas leur seuil
- Une alarme CRITICAL si un répertoire dépassent le seuil en affichant ce répertoire
Marsh Posté le 18-09-2008 à 12:09:12
if [ test1 -o test2 ]
ou
if [ test1 ] || [ test2 ]
Marsh Posté le 18-09-2008 à 12:36:24
Elmoricq a écrit : if [ test1 -o test2 ] |
Thanks j'ai deja un debut,
En fait c'est :
- si test1 et test2 sont inferieur à 1 alors OK
- si test1 est superieur a 5 alors KO
- si test2 est superieur a 1 alors KO
Et si test1 et test2 depassent leur seuil (1 et 5) alors KO sur les deux rep
Marsh Posté le 18-09-2008 à 13:18:39
if [ condition1 -lt 1 -a condition2 -lt 1 ]
ou
if [ condition1 -lt 1 ] && [ condition2 -lt 1 ]
Pour les deux autres tu devrais y arriver.
Encore une fois : man test
Marsh Posté le 18-09-2008 à 16:03:35
Merci beaucoup, j'ai pu avancer un peu mais le script s'arrete au premier OK
|
|
Faut il imbriquer les deux derniers blocs avec un elif ?
Marsh Posté le 18-09-2008 à 16:11:56
J'ai trouvé c'est OK :
|
Marsh Posté le 20-09-2008 à 11:30:21
Elmoricq a écrit : if [ test1 -o test2 ] |
Il faut faire attention à chaque écriture car elle n'est pas tout à fait équivalente.
La première, qui utilise les connecteurs "-a" (and) et "-o" (or) de l'instruction "test" correspond à un seul appel de cette instruction. Celle-ci est appelée une fois et fait toutes les comparaisons demandées même si le test est déjà définitif et devient donc inutile.
Exemple
Code :
|
Etant donné que "hello" n'est pas une chaine vide, le test est déjà vrai. Pourtant le fichier "/tmp/toto" est quand-même créé.
La seconde est une suite de deux instructions séparées par un connecteur and/or traité par le shell lui-même (et non par la commande "test" ). Il y a donc deux appels à l'instruction test mais si l'un des tests devient définitifs, l'ensemble s'arrête
Exemple
Code :
|
Le fichier "/tmp/toto" ne sera jamais créé
C'est bien de le savoir. Mais malgré le fait que l'ensemble "&&" et "||" puisse être plus rapide, personnellement je préfère utiliser "-a" et "-o" (et utiliser intelligemment le tableau de Karnaugh pour optimiser moi-même)...
Marsh Posté le 18-09-2008 à 11:32:35
Hello
Dans le cadre d'une supervision via Nagios, je dois compter le nombre de fichiers dans un répertoire donné, ainsi qu'un de ses sous répertoire nommé "error" (donc deux résultats distincts).
Jusque là pas de probleme je fais ceci :
NBFILE1=$(ls -A1 $MONREPERTOIRE | wc -l)
NBFILE2=$(ls -A1 $MONREPERTOIRE/error/ | wc -l)
Maintenant j'aimerai si dans $MONREPERTOIRE si j'ai moins de 5 fichiers.
Mais également que si dans $MONREPERTOIRE/error/ si j'ai moins de 1 fichiers.
D'après tout ça, je dois sortir soit en exit0 si OK et exit2 si KO (nb fichiers supérieur au seuil), mais également afficher via un echo, le ou les répertoire(s) depassant ce seuil limite.
Pourriez vous m'aider svp ?
---------------
Neo_t3 registered Linux user number 354648. | http://www.ondaflow.com