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 :

debuter sous bash


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Par défaut debuter sous bash
    bonjour je viens du monde du windows, je débute le shell
    j'ai eu de la misère a résoudre ce petit problème, programme doit chercher si un fichier existe puis il récupère le nom du l'image du fichier pour la pouvoir effacer voici mon bout de code ca marche pas je sais pas ou je me suis tromper, merci pour votre aide
    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
     
    #!/bin/bash
     
    exist=`ls -l | grep 'suppr.txt' | wc -l`
     
    if [ $exist -eq 1 ]
    then
     
            read ligne<suppr.txt
            nom=`echo $ligne | cut -f 1 -d :`
            image=`echo $ligne | cut -f 2 -d :`
             if [ -n "$image" ]
             then
                   cd /home/images
                    read ligne<suppr.txt
                    image=`echo $ligne | cut -f 2 -d :`
                    existimage=`ls -l | grep $image | wc -l`
                   if [ $existimage -eq 1 ]     
                    then
                       sudo chmod 777 $image
                       sudo chown root $image
                       sudo chgrp root $image
                       sudo rm -Rf /home/images/'$image'
                    fi
           fi
    fi

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 839
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ayago Voir le message
    bonjour je viens du monde du windows, je débute le shell
    j'ai eu de la misère a résoudre ce petit problème, programme doit chercher si un fichier existe puis il récupère le nom du l'image du fichier pour la pouvoir effacer voici mon bout de code ca marche pas je sais pas ou je me suis tromper, merci pour votre aide
    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
     
    #!/bin/bash
     
    exist=`ls -l | grep 'suppr.txt' | wc -l`
     
    if [ $exist -eq 1 ]
    then
     
            read ligne<suppr.txt
            nom=`echo $ligne | cut -f 1 -d :`
            image=`echo $ligne | cut -f 2 -d :`
             if [ -n "$image" ]
             then
                   cd /home/images
                    read ligne<suppr.txt
                    image=`echo $ligne | cut -f 2 -d :`
                    existimage=`ls -l | grep $image | wc -l`
                   if [ $existimage -eq 1 ]     
                    then
                       sudo chmod 777 $image
                       sudo chown root $image
                       sudo chgrp root $image
                       sudo rm -Rf /home/images/'$image'
                    fi
           fi
    fi
    Je comprends mieux ton but en lisant ton code qu'en lisant la description que tu en fais.
    Donc si j'ai bien compris, tu as un fichier nommé "suppr.txt" qui contient une ligne découpée en "nom:image". Et tu dois récupérer la partie "image" qui est un nom de fichier pour l'effacer. C'est bien ça ???

    Bon, je vais commenter ton code

    1) Tu commences par vérifier l'existence de "suppr.txt". Pour ce faire, tu fais un ls global puis tu extraits la ligne contenant "suppr.txt" puis tu comptes combien ton grep a sorti de lignes. Ok ça marche mais chaque étape aurait pu être supprimée
    En fait, le grep renvoie "vrai" s'il trouve et "faux" s'il ne trouve pas. Donc t'aurais pu écrire
    if ls |grep "supr.txt" (hé oui, après "if" on peut mettre n'importe quelle commande. Pas forcément test

    Mais "ls" accepte un nom de fichier et renvoie une erreur si le fichier n'existe pas. Donc t'aurais pu écrire
    if ls supr.txt 1>/dev/null 2>/dev/null (les redirections sont pour ne pas avoir de message venu du "ls" à l'écran)

    Mais la commande test possède une option pour tester les fichiers. Donc t'aurais pu écrire
    if test -n supr.txt => ça évite d'appeler un programme externe donc plus rapide

    2) tu répètes la phase "read ligne" et "image=`echo ... |cut`. Inutile vu que tu l'as déjà fait juste au dessus. Et la variable "nom" n'est pas utilisée

    3) tu refais un test d'existence à la mode ls |grep |wc alors que "$image" existe forcément vu que tu l'as testé juste avant (d'ailleurs tu utilises test -n donc tu le connaissais)

    4) inutile de se déplacer dans "/home/image". Un script peut très bien travailler sur un fichier situé à l'autre bout de la machine

    5) je vois pas trop pourquoi tu donnes à root un fichier que tu vas effacer. Par ailleurs le chmod 777 ne sert à rien car l'effacement est contrôlé par les droits du répertoire dans lequel se trouve le fichier. Hé oui, effacer un fichier signifie "le supprimer du répertoire" donc ce sont les droits du répertoire qui jouent et non les droits du fichier.
    Par ailleurs le sudo est-il vraiment utile ? En général on fait des scripts pour gérer nos fichiers donc si le fichier t'appartient tu pourras l'effacer. Et si tu fais un script pour root alors root le lancera et il n'aura pas besoin de passer root.
    En fait, ce sudo est un trou de sécurité. Il me suffit maintenant d'écrire un fichier nommé "suppr.txt" contenant la ligne "toto:../../etc/passwd" puis de lancer ton script et hop, plus d'utilisateurs dans ta machine...

    Donc ton code aurait pu s'écrire simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
     
    if [ -n "suppr.txt" ]
    then
            read ligne<suppr.txt
            image=`echo $ligne | cut -f2 -d:`
             if [ -n "/home/image/$image" ]
             then
                       rm -Rf "/home/images/$image"
             fi
    fi
    Voire même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    if [ -n "suppr.txt" ]
    then
            read ligne<suppr.txt
            image=`echo $ligne | cut -f2 -d:`
            [ -n "/home/image/$image" ] && rm -Rf "/home/images/$image"
    fi
    Tu remarqueras que ce code correspond à ta description: il vérifie si un fichier existe puis il récupère le nom de l'image pour l'effacer. Deux phrases donc deux test et pas cinquante.

    Cours complet de shell Linux sur mon site ici http://linux.developpez.com/cours/
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme de debutant sous access
    Par guili dans le forum Access
    Réponses: 8
    Dernier message: 23/06/2005, 16h39
  2. [Debutant(e)]Debuter sous eclipse
    Par chris81 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 03/05/2005, 00h24
  3. [debutant sous eclipse] surround with try catch
    Par Alwin dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 26/06/2004, 20h03
  4. [debutant] sous reseau
    Par bolo dans le forum Développement
    Réponses: 7
    Dernier message: 05/02/2004, 14h09

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