Pour chaque ligne d'un fichier, exécuter un script

Résolu
julessh Messages postés 26 Statut Membre -  
julessh Messages postés 26 Statut Membre -
Bonjour tout le monde !

voila j'ai un petit soucis et oui encore je voudrais exécuter un script pour chaque lignes d'un fichier
le script ayant pour param le contenu de la ligne petit soucis le code bug le voici :

while read aLine ;do listeProgs[$i]="$aLine"; ((i++));
./ckclpl $aLine;
done < /jules/epurer.txt

je ne sais pas si vous voyez ce que j'essaye de faire si vous ne comprenez pas dites le moi :)

merci !

5 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 942
     
    Bonjour,

    ... sauf qu'en bash ça ne s'écrit pas comme ça.
    https://forums.commentcamarche.net/forum/affich-37620017-comment-lire-un-fichier-ligne-par-ligne#syntaxe

    Du coup ce serait plus :

    while read ligne  
    do  
       ./ckclpl $ligne;   
    done < /jules/epurer.txt 


    Par ailleurs, attention aux chemins (c'est sans doute plutôt
    /home/jules/epurer.txt
    + il vaut mieux éviter les chemins relatifs dans un script car le script ne marchera pas forcément en fonction du répertoire dans lequel tu es positionné pour le lancer).

    Bonne chance
    1
    1. julessh Messages postés 26 Statut Membre
       
      cela ne marche pas je n ai pas mis le chemin réel car il contiens des noms de machines confidentiels :)

      mais sinon le script ne marches pas (celui que tu as fait)
      j ai bien évidement remplacé les chemins par les miens
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    qu'est ce qui ne fonctionne pas ?
    0
    1. julessh Messages postés 26 Statut Membre
       
      il execute le script seulement pour la première ligne du fichier
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > julessh Messages postés 26 Statut Membre
       
      Salut,

      Et est-ce que comme ça ça marche ?
      while read ligne  
      do  
         echo $ligne;   
      done < /jules/epurer.txt

      Si oui, il serait opportun de voir aussi le contenu du script
      ckclpl
      ;-\
      0
    3. julessh Messages postés 26 Statut Membre
       
      ckclpl est un script contenant pas mal de lignes permettant d aller checker des choses sur des serveurs
      0
    4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > julessh Messages postés 26 Statut Membre
       
      Merci de répondre d'abord à la 1ère question ;-\
      0
    5. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 942
       
      @julessh et zipe31 : Merci de répondre en bas de fil de discussion avec le bouton "répondre au sujet en bas de page" et non en commentaire, car sinon ça va devenir illisible.

      @julessh : peut-être que ton shell est configuré (voir option -e) pour sortir dès qu'il y a une erreur, et que ton script, ne se termine pas avec le code de retour 0. Ça expliquerait pourquoi le script stoppe à la première itération.

      Une manière de trancher serait de remplacer l'appel à ckclpl par echo comme suggéré ici :
      https://forums.commentcamarche.net/forum/affich-32132518-pour-chaque-ligne-d-un-fichier-executer-un-script#6

      @julessh : pense à répondre à zipe31 :-)
      0
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 942
     
    Je ne sais pas où tu t'es trompé mais a priori ça marche :-)

    toto.txt

    j'aime les tapirs
    oh une mouette


    toto.sh

    #!/bin/sh
    
    while read ligne  
    do  
       echo "<$ligne>";   
    done < $HOME/toto.txt 
    
    exit 0
    


    Test

    (mando@aldur) (~) $ sh toto.sh 
    <j'aime les tapirs>
    <oh une mouette>


    Bonne chance
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    mettre des " si il y a des espaces
    ./ckclpl "$aLine"
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. julessh Messages postés 26 Statut Membre
     
    merci :) a tous finalement j'ai abandonné et je l ai fais avec un sed dans un autre fichier ;)
    0