Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 25/01/2010, 11h33   #1
Invité de passage
 
Inscription : octobre 2009
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 14
Points : 1
Points : 1
Par défaut [bash] Peut on importer des variables avec While IFS?

Bonjour à tous,

J'ai réussi à utiliser correctement la bouche While avec le paramètre $IFS pour découper un fichier ligne par ligne et récupérer diverses partie de chaque ligne dans une variable.

Par contre toutes variables indiquées dans le fichier à traiter sont prisent comme du texte au lieu d'une variable. En examinant le fonctionnement du script, les variables sont protégée par des '

Y a t'il une solution pour qu'elles ne soient pas protégée?

Voici un exemple raccourcis du script en question :
fichier test.sh
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
 
set -x
 
#nom de code de version ubuntu (hardy, jaunty, karmic, ...)
codename="karmic"
 
#on découpe l'entrée standard et on affecte chaque portion de ligne à une variable
while IFS=',' read paquet depot cle option
 do    
   #suppression des espaces et tabulation en début et fin de la portion de la ligne demandé via l'argument de fonction scanlist
 
   depot=$(echo $depot | sed 's/^[ \t]*//;s/[ \t]*$//')
 
   #sortie pour le test visuel
   echo $depot
 
 done < <(grep ^[+] proglist.txt) | sort -u # on trit le fichier en unique et l'injecte en entrée
Fichier proglist.txt
Code :
1
2
# Client de messagerie Empathy
+empathy, deb http://ppa.launchpad.net/telepathy/ppa/ubuntu $codename main #Empathy, FA3A1271, facultatif
J'espère avoir fait au plus simple pour ne pas surcharger le sujet...
percherie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2010, 11h43   #2
Invité de passage
 
Inscription : octobre 2009
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 14
Points : 1
Points : 1
J'avais oublié de poster une proposition de solution qui me semble grossière mais qui fonctionne.

Dans le fichier proglist.txt, si je remplace la variable $codename par CODENAME et dans le fichier test.sh

Code :
   depot=$(echo $depot | sed 's/^[ \t]*//;s/[ \t]*$//')
par
Code :
   depot=$(echo $depot | sed 's/^[ \t]*//;s/[ \t]*$//;s/CODENAME/'$codename'/;')
Tout fonctionne sans problème mais peut être une solution un peut plus correcte existe, à mon niveau c'est ce que je peut faire.
percherie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2010, 12h40   #3
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Bonjour,

Je pense que cela dépend de la façon dont est construit 'proglist.txt' :
si c'est toi qui le rempli, depuis le même script (test.sh), en faisant déjà un sed pour remplacer la version d'Ubuntu, ça peut faire un peu lourdeau;
sinon, si ça ne te plait vraiment pas, tu peux evaluer echo $depot
...
?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 01h17.


 
 
 
 
Partenaires

Hébergement Web