Verifier l'existance d'un fichier

[Résolu/Fermé]
Signaler
-
 MarMottE -
Il y a 6 minutes. #
Salut à tous,

Voilà j'essaye de faire un script en shell qui doit verifier si le fichier de la veille existe bien dans le dossier.

J'arrive bien à lister la liste de dossier mais après je suis bloqué, j'ai essayé une boucle for avec un if mais sans succès.

Voici mon script



SRV='/bin/cat referentiel.csv | /usr/bin/awk -F";" '{ print $1 }''
POLICY='/bin/cat referentiel.csv | /usr/bin/awk -F";" '{ $1 = "" ; print $0 }''

#for SRV


for i in "$SRV"
do
echo "${SRV}"
if [ -f /home/jmi/Policy/${SRV}/${POLICY}_${DATE}.html.gz ]; then
echo "OK"
fi
done

Pour la boucle for je ne suis pas sur du tout

Voici le résultat du script :


baltazarre
melchiore
pacman
yoshi
./check_policy.sh: ligne 39 : [: trop d'arguments

Merci d'avance

3 réponses

Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 416
Salut,

Déjà il faudrait qu'on puisse voir ton script dans sa totalité, parce qu'une erreur à la ligne 39 ça ne veut rien dire pour nous ;-((

De plus on ne sait même pas si $DATE est déclarée, et si oui, comment ;-(

Ta boucle "for" n'a aucune chance d'aboutir dans la mesure ou la variable "$i" n'est utilisée nulle part ;-(

De plus, je suppute l'existence d'espace dans les informations ramenées par ta variable "$SRV" ;-\

Pour finir, la recherche du fichier de la veille devrait pouvoir être cherché avec la commande find ou comparée avec les attributs natifs du fichier, du moins il me semble...
Salut,

Je te met la totalité du script. Pour la boucle ma variable i n'est déclaré nul part. Et pour la recherche il m'a été demandé de m'appuyer sur un fichier source avec le nom des serveur et les fichiers qui doivent être présent.

#! /bin/sh


#Verification de la présence des Policy Files CMA
$1
## VARIABLES
DATE='date +%Y-%m-%d -d'1 days ago''
PATH="/home/jmi/Policy/"
GREP="/bin/grep"


#_NAG_RET_OK=0
#_NAG_RET_CRITICAL=2

##TRAITEMENTS

SRV='/bin/cat referentiel.csv | /usr/bin/awk -F";" '{ print $1 }''
POLICY='/bin/cat referentiel.csv | /usr/bin/awk -F";" '{ $1 = "" ; print $0 }''

#for SRV


for i in "$SRV"
do
echo "${SRV}"
if [ -f /home/jmi/Policy/${SRV}/${POLICY}_${DATE}.html.gz ]; then
echo "OK"
fi
done

./check_policy.sh: ligne 32 : [: trop d'arguments
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 416
Dans "/home/jmi/Policy/${SRV}/${POLICY}_${DATE}.html.gz" qu'est sensé contenir "${SRV}" ?

Le nom d'un fichier non ? Style "baltazarre" ou "melchiore" ?
zipe31 - 4 jun 2011 à 18:22

Dans "/home/jmi/Policy/${SRV}/${POLICY}_${DATE}.html.gz" qu'est sensé contenir "${SRV}" ?

Le nom d'un fichier non ? Style "baltazarre" ou "melchiore" ?

${SRV} contient la liste des noms des serveurs :

baltazarre
melchiore
pacman
yoshi

et $ {POLICY} le nom des fichiers
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 416
et $ {POLICY} le nom des fichiers
Il manque une boucle imbriquée alors ;-((

Il faut vérifier l'existence de chaque fichier dans chaque serveur ?

Si oui
Sans conviction...

for i in $SRV # sans les guillemets autour
do
echo "${i}"

for j in ${POLICY}
do
echo "${j}"

if [ -f /home/jmi/Policy/${i}/${j}_${DATE}.html.gz ]; then
echo "OK"
fi
done

done
C'est presque ça en tout cas il execute bien mon script maintenant merci pour ton aide mais là il parcours tout les fichiers pour chaque serveurs et moi en faite il faut qu'il affiche les fichiers présent dans le dossier du serveur par ex : serveur baltazarre fichier cma_policy_baltazarre.gz.html ....

Merci
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 416
Euh.... non. Logiquement le script teste pour chaque répertoire contenu dans "${SRV}" (variable ${i}) si le fichier correspondant à "${j}_${DATE}.html.z" existe et affiche OK le cas échéant...

Ne sachant pas ce que contiennent tes répertoires, ni ce que retournent exactement tes variables et n'ayant pas les moyens de tester en direct, je ne peux que faire des suppositions ;-\
Salut merci pour ton aide en tout cas, au pire je verrai avec les mecs de mon équipes pour la fin du script