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 09/02/2010, 16h11   #1
Futur Membre du Club
 
Inscription : septembre 2006
Messages : 86
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 86
Points : 17
Points : 17
Par défaut interaction awk avec le script shell qui l'appelle

Ci dessous un bout de code dans script shell (ksh) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
awk '
        BEGIN {
 
        }
        {if ($1 == "***SNMP-START***") START = TRUE
        if(NR == 3) print($4,"",$5)
        if(NR == 5) specificType = substr($2, length($2),1)
 
 
  }' trap_formater_1_tabulation_sep.txt
}
Dans la commande j'initialise le variable specificType dont j'en ai besoin de l'utiliser en dehors de la commande awk c.a.d dans le script shell.

d'où la question suivante ,comment faire pour exporter une valeur en dehors de la commande awk et l'importer dans le script shell .


Merci en avance
kass28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2010, 16h26   #2
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 129
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 129
Points : 8 749
Points : 8 749
Bonjour,

Tu ne peux pas. Du moins pas en restant avec de simples variables.

Explication :
Tu as un shell, dans lequel tu peux definir des variables. Celles-ci sont locales a ce processus.
Ce shell offre une possibilite, qui est de lancer un programme externe. Ce dernier definira ses propres variables, qui ne seront accessibles qu'a lui. Ce programme externe peut, au mieux, renvoyer un code de retour qui indique si tout s'est bien passe ou non.

Ce qui est possible de faire : passer une (ou plusieurs) valeur au programme appele.
Pourquoi ? Simplement parce que tu vas les passer en argument au programme externe. Mais meme dans ce cas, pas de modification possible, pas de renvoi possible en dehors du code de retour.

Solution : passer par un fichier, une base de donnees, une variable d'environnement, ...
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2010, 10h18   #3
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Bonjour,

Je vais ajouter quelques commentaires a ceux de gangsoleil.

Il est possible egalement d'utiliser les sockets et d'envoyer, depuis awk, les resultats: par exemple resultat_1 vers socket 3, resultat_2 vers socket 4... Puis de lire plus tard, depuis le script, les sockets. Je suis en vacances et je ne vais pas passer plus de temps la-dessus.

Une alternative est de sortir les resultats simplement sur stdout avec un separateur, comme '@' par exemple. On obtient alors:
Code :
1
2
3
resultats=$(awk 'BEGIN {OFS="@"} {...} END {print r1, r2}' fichier)
r1=${resultats%@*}
r2=${resultats#*@}
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2010, 10h55   #4
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 129
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 129
Points : 8 749
Points : 8 749
Je me complete egalement : comme tu ne peux pas passer la valeur de awk vers ton script, tu dois trouver un moyen de communiquer de l'information entre deux processus. Ci-dessous une liste non exhaustive de certains IPC (Inter Process Communication), dans laquelle tu peux piocher en fonction de tes besoins ou de tes contraintes.
  • signal
  • fichier
  • base de donnée
  • socket
  • mémoire partagée
  • file de messages
  • sémaphore
  • pipes
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2010, 11h05   #5
Invité de passage
 
Ibrahim Fall
Inscription : février 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : Ibrahim Fall

Informations forums :
Inscription : février 2010
Messages : 7
Points : 4
Points : 4
moi, j'suis assez fan du

donc ou
Code :
awk '...' | la suite du script
ou
Code :
variable="$(awk '...')"
ou encorevoili voila vois-tu
2.0.1.0 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 01h34.


 
 
 
 
Partenaires

Hébergement Web