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 06/05/2011, 11h26   #1
Membre Expert
 
Avatar de Bktero
 
Inscription : juin 2009
Messages : 770
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2009
Messages : 770
Points : 1 290
Points : 1 290
Par défaut Suppression du premier champ et des retours à la ligne d'une variable

Bonjour,

Je travaille avec des scripts Shell, où il y a de nombreux appels à SQLPlus, pour interroger une base Oracle. Les retours de SQLPlus sont stockés dans une variable. On a alors des trucs du genre :
Code Exemple 1 :
1
2
3
4
 
> echo $res_compare2
Connected.
-1
Code Exemple 2 :
1
2
3
4
5
 
> echo $res_compare2
Connected.
OK.
La procedure s'est bien passee.

Pour tout remettre en ligne et enlever le message "connected.", les gens qui m'ont précédé sur le projet ont eu la (fausse) bonne idée de faire comme ça :
Code :
1
2
3
4
 
set $res_compare
shift 1
res_compare=`print $*`
Je dis que c'est une fausse bonne idée, car dans le 1er exemple ci-dessus, "-1" est considéré comme une option et donc la variable est vide après le "shift". Et après, bibi cherche pourquoi le script fait de m***e !


Je souhaite donc trouver une technique plus propre pour enlever le "connected.". Pour l'exemple 1, je fais simplement :
Code :
1
2
 
res_compare=$(print ${res_compare} | grep -v "Connected.")
Je voudrais déjà savoir s'il y a une méthode plus élégante que cela.


Sauf, ça ne m'élimine pas les retours à la ligne... Dans le cas de l'exemple 2, je souhaiterais obtenir "OK. La procedure s'est bien passee.". Je me dit que je pourrais utiliser une commande perl pour remplacer les \n par des espaces, mais ça me parait à nouveau peu élégant...



Auriez-vous des suggestions pour faire ça de façon propre et efficace SVP ?

Merci d'avance !
__________________
Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/05/2011, 11h47   #2
Membre éclairé
 
Avatar de FRUiT
 
Homme
Inscription : février 2011
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2011
Messages : 83
Points : 326
Points : 326
Code :
1
2
3
4
5
6
> var="$(printf "%b\n" "Connected." "-1")"
> echo "$var"
Connected.
-1
> echo "$var" | awk '!/Connected./'
-1
Code :
1
2
3
4
5
6
7
8
> var="$(printf "%b\n" "Connected." "OK." "La procedure s'est bien passee.")"
> echo "$var"
Connected.
OK.
La procedure s'est bien passee.
> res_compare="$(echo "$var" | awk '!/Connected./ { printf ("%s ",$0) }')"
> echo "$res_compare"
OK. La procedure s'est bien passee.
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
FRUiT est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/05/2011, 11h57   #3
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Quel système ?
Quel environnement ?
Quel shell ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
$ A="Connected.
OK.
La procedure s'est bien passee."

$ echo ${A}
Connected. OK. La procedure s'est bien passee.

$ echo "${A}"
Connected.
OK.
La procedure s'est bien passee.

$
Normalement sans quote ta variable devrait être sur une seule ligne
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/05/2011, 11h58   #4
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Citation:
Envoyé par Bktero Voir le message
Bonjour,

...

Auriez-vous des suggestions pour faire ça de façon propre et efficace SVP ?

Merci d'avance !
Modifier la façon dont $var est alimenté

Sinon

Code :
1
2
3
4
5
$ echo "$var" | tail -1
-1
$ Array=($(echo $var))
$ echo ${Array[1]}
-1
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/05/2011, 13h09   #5
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Bonjour,


pour éviter ce type de désagrément, utiliser :-- signifie "fin des options".
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 11/05/2011, 15h40   #6
Membre Expert
 
Avatar de Bktero
 
Inscription : juin 2009
Messages : 770
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2009
Messages : 770
Points : 1 290
Points : 1 290
Merci pour vos différentes réponses. Elles m'apportent différents éléments intéressants.


Je voulais juste revenir sur la remarque de zipe31. Effectivement, il y a un problème de retour à la ligne. Mais c'était bizarre :
- dans mon script test, je n'ai pas mis de guillemet, et je n'ai pas eu de problème.
- une fois placé le même code dans le script final (beaucoup long, dans lequel je corrigeais une anomalie donc...), il y a eu le problème... J'ai rajouté les guillemets et c'était bon.
Ce problème ne devrait-il pas être systématique ?
__________________
Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 18h20   #7
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Re-

Je vais me répéter

Quel système ?
Quel environnement ?
Quel shell ?

Merci
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/05/2011, 10h19   #8
Membre Expert
 
Avatar de Bktero
 
Inscription : juin 2009
Messages : 770
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2009
Messages : 770
Points : 1 290
Points : 1 290
> uname -a
SunOS sun45 5.10 Generic_142900-12 sun4u sparc SUNW,SPARC-Enterprise

Quelle différence fais-tu entre environnement et système ?


Pour ma version de ksh....Je n'arrive pas à la trouver
__________________
Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/05/2011, 10h32   #9
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Oups désolé, question environnement c'était plus en rapport avec les distribs GNU/Linux et leurs interfaces graphiques

Sinon est-ce que ton script est aussi en ksh ?

Après pour répondre à ta question :
Citation:
- une fois placé le même code dans le script final (beaucoup long, dans lequel je corrigeais une anomalie donc...), il y a eu le problème... J'ai rajouté les guillemets et c'était bon.
Ce problème ne devrait-il pas être systématique ?
Normalement si, mais là je ne vois pas
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h07.


 
 
 
 
Partenaires

Hébergement Web