Il y a actuellement 90 visiteurs
Vendredi 30 Juillet 2021
accueilactualitésdossierscomparer les prixtélécharger gratuitement vos logicielsoffres d'emploiforum informatique
Connexion
Créer un compte

Condition pour tester l'existence d'un fichier ne marche pas

Besoin d'aide pour configurer un serveur ? Vous souhaitez obtenir des conseils pour référencer votre site ? Un petit souci pour accéder à votre FTP ? Des soucis de programmation en PHP / ASP / HTML / XHTML / XML / XSLT / CSS / ReactJS / AngularJS / VueJS / CGI / PERL / C / MySQL / PostgreSQL ??? Nous avons peut-être la solution dans ce forum ...

Condition pour tester l'existence d'un fichier ne marche pas

Message le 25 Mar 2011 16:28

Bonjour à tous !

Je suis débutant et j'ai un souci avec avec la condition dans mon script en batch.
J'aimerai mettre au point pour mes cours un script qui contrôle les fichiers qui ont le droit Suid sur na machine.

Voici ce que j'aimerai mettre en place :

Lors du premier lancement du script, un fichier est créé contenant tous les fichiers qui ont le droit Suid.Ensuite, lors des prochains lancements du scripts, il va détecter que mon fichier existe et en créera un autre temporaire dans lequel il mettra la nouvelle liste des fichiers en Suid. Enfin il fera un diff des 2 fichiers pour les comparer.

Le problème , c'est que ma condition ne marche pas...

Voici mon code :

#!/bin/bash

original=/root/Bureau/scripts/Setuid.txt
temporaire=/root/Bureau/scripts/Setuidtemp.txt
base=/

if [ -e $orignal]
then
touch $temporaire
recherche=`find $base -type f -perm -u=s -print`
for fichiers in $recherche
do
detail=`ls -l $fichiers`
echo $detail >> $temporaire
done
diff -a $orignal $temporaire
rm $temporaire
else
touch $orignal
recherche=`find $base -type f -perm -u=s -print`
for fichiers in $recherche
do
detail=`ls -l $fichiers`
echo $detail >> $orignal
done
fi
exit

En gros au début je teste si mon fichier existe. Si il existe je crée un fichier temporaire et je fais le diff des 2.
Si il n'existe pas je le crée (le ELSE).

Le problème c'est qu'il ne passe pas au ELSE alors que le fichier n'existe pas... il crée le fichier temporaire et forcément le diff affiche une erreur. La condition ne marche pas... Au secours !!! Je suis pomé là...


Bonne journée et merci d'avance !
shinobitom
Apprenti(e) Expert(e)
Apprenti(e) Expert(e)
 
Messages: 148
Inscription: 14 Avr 2009 19:06
 


Re: Condition pour tester l'existence d'un fichier ne marche

Message le 26 Mar 2011 12:14

Oups j'ai Pas commenté mon code PARDOnnn

En gros ce que je voudrais obtenir c'est :

Si le fichier original existe
Création d'un fichier temporaire qui répertorie les fichiers Suid
diff du fichier original et du temporaire
Sinon
Création du fichier original répertoriant les fichiers Suid

C'est tout bête mais il ne prend pas la condition... Il ne passe pas au "sinon" alors que mon fichier n'existe pas...
:cry:

#!/bin/bash

#Variables

original=/root/Bureau/scripts/Setuid.txt # variable contenant le chemin de mon fichier original
temporaire=/root/Bureau/scripts/Setuidtemp.txt #contient le chemin de mon fichier temporaire
base=/ #base de la recherche

#corps de mon code

if [ -e $orignal ] # si le fichier original fichier existe
then #alors
touch $temporaire #création du fichier temporaire
recherche=`find $base -type f -perm -u=s -print` # recherche des fichiers Suid
for fichiers in $recherche # pour chaque fichiers trouvés
do #faire
detail=`ls -l $fichiers` #ls -l du fichier
echo $detail >> $temporaire # écrire le résultat dans mon fichier temporaire
done
diff -a $orignal $temporaire # différence ds 2 fichiers pour voir si un fichier Suid à été rajouté
rm $temporaire # Supression du fichier temporaire
else #Sinon
touch $orignal #Je créé le fichier original
recherche=`find $base -type f -perm -u=s -print` #Je recherche les fichiers Suid
for fichiers in $recherche #Pour chaque fichiers trouvés
do #faire
detail=`ls -l $fichiers` #ls-l du fichier
echo $detail >> $orignal #écrire le résultat dans mon fichier temporaire
done
fi
exit



Je comprends pas pourquoi il ne passe pas au "sinon" alors que la condition est fausse.. 8O.

Merci d'avance !
shinobitom
Apprenti(e) Expert(e)
Apprenti(e) Expert(e)
 
Messages: 148
Inscription: 14 Avr 2009 19:06
 

Re: Condition pour tester l'existence d'un fichier ne marche

Message le 26 Mar 2011 12:15

AAAj'arrive pas à espacer et mettre des alinéas pour indenter mon code !!!! ça passe pas après que j'envoie... COmment je peux faire? ( lol alalala il est vraiment nul ce débutant en batch !)
shinobitom
Apprenti(e) Expert(e)
Apprenti(e) Expert(e)
 
Messages: 148
Inscription: 14 Avr 2009 19:06
 

Re: Condition pour tester l'existence d'un fichier ne marche

Message le 26 Mar 2011 17:10

Pour l'indentation, sers toi de la balise code : [ code ][ /code ] qui est faite pour cela.
Il doit te manquer un ";" apres la condition :

Code: Tout sélectionner
if [ -e $orignal ];                                                   # si le fichier original fichier existe
       then                                                           #alors


shinobitom a écrit:( lol alalala il est vraiment nul ce débutant en batch !)

Meuhh non, par contre t'es débutant en commentaire de code... on commente par ce genre de truc :
do #faire

parce que si on sait pas ce que "do" fait, on va pas lire le code...
en encore moins ceci :
detail=`ls -l $fichiers` #ls -l du fichier

commenter un 'ls -l " pour dire que c'est un "ls -l"... heu c'est inutile
Je te dis cela car ça a aussi un grand intérêt de savoir commenter du code, presque autant que de savoir le faire ;-)
Libérez-vous : http://www.debian.org
Nobody knows what sysadmin does... until he stops doing it
Avatar de l'utilisateur
CaSa
PC-Infopraticien
PC-Infopraticien
 
Messages: 8978
Inscription: 13 Mai 2003 16:32
Localisation: Sisteron... et jamais loin d'une Debian
 

Re: Condition pour tester l'existence d'un fichier ne marche

Message le 27 Mar 2011 13:20

Lol ! J'avoue ! ( a bon do ça veut dire faire ? :lol: )

Merci bien !

Bon par contre t'es sûr pour ";" dans la condition ? J'ai jamais vu ça sur les tutos et les cours de Batch que j'ai suivi...

Par contre j'ai trouvé la solution ! Il faut mettre des doubles côtes au niveau de la variable dans la condition sinon il la prend pas... J'ai mis if [ -e $original ] à la place de if [ -e "$original" ].

A+
shinobitom
Apprenti(e) Expert(e)
Apprenti(e) Expert(e)
 
Messages: 148
Inscription: 14 Avr 2009 19:06
 

Re: Condition pour tester l'existence d'un fichier ne marche

Message le 27 Mar 2011 22:04

[quote="shinobitom"Bon par contre t'es sûr pour ";" dans la condition ? J'ai jamais vu ça sur les tutos et les cours de Batch que j'ai suivi...[/quote]
Chapitre 4 - les conditions
=> http://www.trustonme.net/didactels/148.html
Libérez-vous : http://www.debian.org
Nobody knows what sysadmin does... until he stops doing it
Avatar de l'utilisateur
CaSa
PC-Infopraticien
PC-Infopraticien
 
Messages: 8978
Inscription: 13 Mai 2003 16:32
Localisation: Sisteron... et jamais loin d'une Debian
 

Re: Condition pour tester l'existence d'un fichier ne marche

Message le 29 Mar 2011 11:07

Bonjour,

Le ";" indique une fin d'instruction, le lien donné par CaSa indique un ";" après la fin de la condition et avant le "then".

Personnellement, je mets le "then" sur la ligne d'après.

Ces 2 codes sont donc bon :

Code: Tout sélectionner
if [ -e $orignal ]; then
  #code
fi

Code: Tout sélectionner
if [ -e $orignal ]
then
  #code
fi



shinobitom a écrit:Par contre j'ai trouvé la solution ! Il faut mettre des doubles côtes au niveau de la variable dans la condition sinon il la prend pas... J'ai mis if [ -e $original ] à la place de if [ -e "$original" ].


Je viens de faire un test et chez moi (gentoo 2.6.36 r5) ça fonctionne avec ou sans doubles quotes... Peut-être un paramétrage ou une différence de version.
Image
Avatar de l'utilisateur
RobinSG
Moderateur
Moderateur
 
Messages: 1514
Inscription: 29 Juin 2004 14:26
Localisation: Atys
 



Sujets similaires

Message Copier tous les fichier d'un même type en bat
Bonjour.J'ai vu qu'on pouvait utiliser l'astérisque en batch comme "joker", pour viser plusieurs fichiers d'un seul coup, comme par exemple le code ci-dessous qui serait censé copier tous les fichier mp3 dans un nouveau dossier :Code: Tout sélectionnerxcopy  c:\*.mp3  nom_du_doss ...
Réponses: 14

Message Changer icône d'un fichier
Bonjour.Je me demandais s'il est possible de changer l’icône d'un fichier via un programme ou autre, mais sans en faire de raccourci.À ma connaissance ça n'est pas possible mais je suis pas expert du domaine non plus...Merci 'avance.
Réponses: 1

Message affichage erroné du nom d'un fichier vidéo - besoin d'aide
BonjourJe vous explique mon problème : quand j'utilise mon player freebox en tant que lecteur réseau, le nom de plusieurs fichiers vidéo (en MKV) est affiché de manière "erronée" (si je puis m'exprimer ainsi) à l'écran.Ainsi, un fichier que j'ai intitulé "1 Le Concert" apparaît à ...
Réponses: 2

Message Soucis Partage de fichier
Bonjour,je viens vers vous après de multitude d'essai pour regler mon problème qui est :J'utilise un ordinateur sous win 7 (le serveur, celui qui possede le dossier à partager) et le pc client est sous windows 10.-J'ai régler mon pare-feu windows avec les bonnes autorisations (Partage de fichiers et ...
Réponses: 0

Message fichier OBD
Salut les amis...Longue absence, qques soucis perso, ca va mieux !Content de vous revoir, les confinés !Bon, j'ai un vieux fichier .obd (et non pas odb), créé il y a longtemps avec l'office 97 (office binder)Pas moyen de l'ouvrir, pas moyen d'installer office 97 sur une machine virtuelle (en fait, p ...
Réponses: 10

Message VLC problème de lecture fichier mkv x264 ac3
Bonjour,suite à de nombreux problèmes avec VLC et après de longues recherches de solutions sur le net je me tourne vers vous car VLC bloque et crash à chaque fois que je veux lire un fichier MKV X264 AC3. Mon matériel:Asus ROG GL742VWprocesseur: intel core i5-6300 2.30GHz 4 coeurcarte graphique: nvi ...
Réponses: 14

Message [Résolu] Problème fichier APPX..... dans le fichier /Temp
Bonjour à toutes et tous.J'ai depuis hier après midi après midi des fichiers AppX créés dans le fichier C:Windows/Temp.Ces derniers remplissent mon disque dur rapidement.J'ai vu plein de choses sur internet mais rien ne fonctionne.J'ai suivi celui là :https://support.microsoft.com/fr-fr/help/4458149 ...
Réponses: 12


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


.: Nous contacter :: Flux RSS :: Données personnelles :.
cron