IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

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


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Condition pour tester l'existence d'un fichier ne marche pas
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #!/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éement le diff affiche une erreur. La condition ne marche pas... Au secours !!! Je suis pomé là...


    Bonne journée et merci d'avance !

  2. #2
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Ce qui me saute aux yeux yeux, c'est alors qu'il faudrait une espace avant le crochet fermant : Maintenant, il serait bien de
    1. utiliser les "codes tags" (bouton #)
    2. indenter le code

    pour rendre cela plus lisible.
    D'autre part, il me semble qu'il y aune redondance de code qui suggère que l'utilisation d'une fonction serait bienvenue

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Salut Fransoo !
    Merci pour ta réponse

    Autant pour moi pour l'espace mais j'avais essayé sans, faute de frappe. Et pour l'indentation j'ai fait une copie d'un fichier txt sur ce forum ça n'avait pas pris les alinéas...
    Par contre tu as raison j'ai commenté mon code

    Par contre je ne comprends pas où tu voudrais utiliser une fonction ? Par ce que normalement la condition suffit à dire quelle partie du code exécuter.

    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...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/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.. .

    Merci d'avance !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Oups ! J'arrive pas à mettre des espaces et des alinéas dans mon post pour indenter mon code... LOL Désolé (alalala il est vraiment nul ce débutant en batch...)

  5. #5
    Membre averti
    Homme Profil pro
    Consultant PLM
    Inscrit en
    Août 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant PLM

    Informations forums :
    Inscription : Août 2007
    Messages : 203
    Points : 304
    Points
    304
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/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 [ -f $original ] # 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 $original $temporaire # différence ds 2 fichiers pour voir si un fichier Suid à été rajouté
       rm $temporaire # Supression du fichier temporaire
    else #Sinon
       touch $original #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 >> $original #écrire le résultat dans mon fichier temporaire
       done
    fi
    exit

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    Bonjour,

    oulala... tout ça, tout ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash
     
    #Variables
    # variable contenant le chemin de mon fichier original
    orignal=/root/Bureau/scripts/Setuid.txt
    # contient le chemin de mon fichier temporaire
    temporaire=/root/Bureau/scripts/Setuidtemp.txt
    # base de la recherche
    base=/
     
    if [ -e "$orignal" ]
    then find $base -type f -perm -u=s -print -ls | diff -a $orignal -
    else find $base -type f -perm -u=s -print -ls > $orignal
    fi
    c'est tout ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre averti
    Homme Profil pro
    Consultant PLM
    Inscrit en
    Août 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant PLM

    Informations forums :
    Inscription : Août 2007
    Messages : 203
    Points : 304
    Points
    304
    Par défaut
    [HS]Mais pourquoi tout le monde veut tester l'existence de l'élan ?[/HS]

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    LOL

    Merci merci à tous ça marche !
    Ouai c'est vrai que mon code était un peu long pour ce que je devais faire !
    Mais bon pour comprendre j'aime bien tout décomposer au début.

    EN fait grace à Nbah j'ai compris que ma condition ne marchait pas car il me manquait les doubles cotes " autour de ma variable dans la condition. C'est pour ça qu'elle ne passait pas !

    je mettais if [ -e $original ] à la place de if [ -e "$original" ]

    VOUALA alors bien le merci à tous je reviendrais

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/07/2012, 23h16
  2. [MySQL] Condition pour tester si une valeur existe déjà dans la base
    Par rachou59650 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/04/2008, 11h22
  3. Réponses: 3
    Dernier message: 24/06/2004, 12h23
  4. tester l existence d un fichier sous turbo pascal
    Par Newllite dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 25/01/2004, 13h47
  5. Peut on tester l'existence d'un fichier ?
    Par Alamassepointcom dans le forum Flash
    Réponses: 2
    Dernier message: 10/10/2002, 13h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo