Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/09/2014, à 14:11

StanislasZr

[Résolu] Script shell ; cherche commande désespérément!

Bonjour,
je suis bloqué dans l'écriture d'un script bash ; en gros, je me trouve dans une boucle qui me sort une série valeurs numeriques qui devront ensuite être triées avec un

sort -n

.
Probleme, chacune de ces valeurs doit être suivie d'une courte description. Si la sortie devait se faire en console, j'utiliserais simplement un

echo "`ma_commande_qui_me_retourne_ma_valeur` ma_description"

.
Mais vu que je dois les trier après, je me vois obligé de transiter par un fichier temporaire. Je cherche donc une remplaçante á la commande echo qui ait à peu pres le même fonctionnement que clle-ci mais dont la sortie peut se faire dans un fichier! du genre :

commandesimilaireà_echo "`ma_commande_qui_me_retourne_ma_valeur` ma_description" >> fichier_temporaire

Bon, au final la commande n'a plus grand chose en commun avec echo, puisque je cherche justement à ne pas afficher la sortie dans la console!
De cette façon, je n'aurai plus qu'à utiliser un petit

sort -n fichier_temporaire

après ma boucle et mon problème sera réglé!

A défaut, une autre solution serait d'ajouter à l'aide d'une autre boucle ma description (qui ne consiste en réalité en rien d'autre qu'en le nom de chaque variable préçédé d'un symbole) à la fin de chaque  ligne correspondante du fichier temporaire (puisque une ligne = une valeur numérique) et de trier ensuite. Existe-t-il une commande qui ait cet usage (sorte de concaténation à la fin d'une ligne définie, dans un fichier)?

Merci d'avance pour le temps accordé!!

Dernière modification par StanislasZr (Le 05/09/2014, à 23:46)

Hors ligne

#2 Le 05/09/2014, à 14:38

nesthib

Re : [Résolu] Script shell ; cherche commande désespérément!

Ta description n'est pas très claire… (en particulier, comment fais-tu correspondre une description à une valeur ?).
Pourrais-tu donner un exemple concret et explicite ?

Ce que je comprends est que tu veux concaténer ligne à ligne 2 listes, tu peux faire ainsi :
fichier1

1
2
3
4
5

fichier2

ligne A
ligne B
ligne C
ligne D
ligne E

et pour les fusionner :

paste -d ' ' fichier1 fichier2
1 ligne A
2 ligne B
3 ligne C
4 ligne D
5 ligne E

Bien entendu, tu n'as pas besoin d'avoir des fichiers temporaires, l'entrée de paste peut être lue sur la sortie d'une ou deux commandes.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 05/09/2014, à 19:53

Postmortem

Re : [Résolu] Script shell ; cherche commande désespérément!

Salut,
C'est pas très clair mais ça ne serait tout simplement pas ça ?

echo "`ma_commande_qui_me_retourne_ma_valeur` ma_description" >> fichier

Édit :
Toute commande qui affiche quelque chose à l'écran, il suffit de rajouter la redirection et ça va dans le fichier.

Dernière modification par Postmortem (Le 05/09/2014, à 19:54)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#4 Le 05/09/2014, à 21:27

StanislasZr

Re : [Résolu] Script shell ; cherche commande désespérément!

Tout d'abord merci de vos réponses!
C'est vrai que mon post n'est pas très explicite, mais j'ai du mal à mettre des mots sur ce que je veux faire.
Alors : Ma boucle génère à chaque tour une valeur, qui doit se retrouver suivie d'un tiret "-" ainsi que du nom de ma variable.
Donc, en simplifiant :

do 
echo "`ma_commande_qui_me_retourne_ma_valeur(en fonction de ma_variable)` - $ma_variable"
done

MAIS cette liste

valeur1 - ma_variable1
valeur2 - ma_variable2
valeurN - ma_variableN 

va s'afficher en console, ce que je ne veux pas puisque je n'ai pas fini de l'utiliser. Certes Postmortem, utiliser le double chevron permettrait de "contourner mon probleme", mais je ne veux pas que quoi que ce soit s'affiche en console avant la fin du script. D'où l'idée d'utiliser un fichier temporaire afin de stocker tout ça et d'en faire ce que bon me semble avant de l'afficher. Donc, je ne peux pas employer echo. Mais à ma connaissance, c'est la seule commande qui permet d'ajouter du texte "personnel" (en l'occurence mon fameux tiret) entre ce qui est généré par le script. Voila pourquoi j'ai utilisé la comparaison avec echo.

nesthib, peut-être que je pourrais me servir de ce

paste -d

suivi d'une redirection (meme si ça paraît un peu louche envisagé comme ça!), en revanche voudrais-tu bien me donner un exemple de la syntaxe a employer pour avoir en entrée d'une part : `ma commande qui me génere ma valeur`, d'autre part " - $ma_variable". Le manuel n'a pas été très bavard sur ce coup... mad

Dernière modification par StanislasZr (Le 05/09/2014, à 21:30)

Hors ligne

#5 Le 05/09/2014, à 21:49

StanislasZr

Re : [Résolu] Script shell ; cherche commande désespérément!

nesthib ta solution pourrait vraiment marcher si je créais deux fichiers temporaires, mais même là: comment ajouter un caractère (ou un mot, ou n'importe quoi qui soit toujours similaire) à une liste qui est générée
par le script dans un fichier, comme je pourrais le faire tout bêtement entre les guillemets avec echo?? C'est vraiment ça qui me pose souci en fait, même si c'est tout con!

Dernière modification par StanislasZr (Le 05/09/2014, à 21:50)

Hors ligne

#6 Le 05/09/2014, à 21:58

Postmortem

Re : [Résolu] Script shell ; cherche commande désespérément!

Mais si tu fais :

echo "`ma_commande_qui_me_retourne_ma_valeur` ma_description" >> fichier

echo n'affiche rien dans la console, tout va dans le fichier !
À moins que ta commande `ma_commande_qui_me_retourne_ma_valeur` ne sorte un message d'erreur, dans ce cas, ce message d'erreur sera sur la console.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#7 Le 05/09/2014, à 22:01

jplemoine

Re : [Résolu] Script shell ; cherche commande désespérément!

echo "`ma_commande_qui_me_retourne_ma_valeur` ma_description" >> fichier 2>&1

doit, je pense, tout renvoyer vers le fichier...


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#8 Le 05/09/2014, à 22:14

Postmortem

Re : [Résolu] Script shell ; cherche commande désespérément!

Et si dans ta boucle tu fais plusieurs echo, plutôt que d'ajouter la redirection après chaque echo, tu peux faire :

do
echo ....
echo ....
done > fichier

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#9 Le 05/09/2014, à 22:36

nesthib

Re : [Résolu] Script shell ; cherche commande désespérément!

Tu peux toujours stocker le tout dans une variable :

VAR=$(echo start ; pwd ; date ; echo stop)
echo "$VAR"
tr 'a-z' 'A-Z' <<<"$VAR"

Mais je pense que tu te méprends sur le fonctionnement du shell. La notion de « commande non finie » n'a pas vraiment de sens pour ce que tu cherches à faire. Il est parfaitement inutile d'utiliser un fichier ou une variable comme stockage temporaire si tout ce que tu veux faire est traiter du texte et l'afficher (à moins de travailler sur des données énormes).
Si ce que tu veux faire est générer du texte, le trier et l'afficher, tu peux enchaîner les commandes. Tu peux renvoyer la sortie d'une boucle vers une commande.
Un exemple (stupide) :

for i in {1..10} ; do echo $i ; done | shuf

Tu devrais expliquer en détail ce que tu cherches à faire (ce que fait ta commande, pourquoi trier, etc.), on ne peut pas vraiment t'aider si tu ne donnes pas le but de ton script wink


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#10 Le 05/09/2014, à 23:34

StanislasZr

Re : [Résolu] Script shell ; cherche commande désespérément!

Postmortem a écrit :

[avec la redirection] echo n'affiche rien dans la console, tout va dans le fichier !

OK, désolé d'être si tétu, là c'est le moment ou je me sens con!

do
echo ....
echo ....
done > fichier

C'est vrai que ça allège bien!!

nesthib a écrit :
VAR=$(echo start ; pwd ; date ; echo stop)
echo "$VAR"
tr 'a-z' 'A-Z' <<<"$VAR"

Veux-tu bien m'expliquer en détail ce que fait la derniere ligne? Et ce que tu appelles commande non finie?

Mais je pense que tu te méprends sur le fonctionnement du shell.

Il y a encore 3 semaines, je ne savais même pas ce qu'était Ubuntu, et j'éxagère à peine! Je suis à moitié pardonné?? big_smile

Tu peux renvoyer la sortie d'une boucle vers une commande.

Non, là, vraiment, c'est trop!!
Merci, merci, vous êtes ce soir des rayons de soleil dans ma nuit! cool

Hors ligne

#11 Le 05/09/2014, à 23:57

nesthib

Re : [Résolu] Script shell ; cherche commande désespérément!

La dernière commande remplace simplement les minuscules par des majuscules, c'était un simple exemple pour te montrer quoi faire avec la variable (pour l'afficher ou l'envoyer à une commande).
C'est toi qui parlait de commande non finie (message #4, « puisque je n'ai pas fini de l'utiliser »).

Ubuntu et un shell sont deux choses très différentes, (tu as un shell sous tous les autres unix et même sous windows), mais pas de soucis, tu as le droit d'être débutant wink
Oui, tu peux renvoyer le contenu de la boucle vers une commande, et même faire des dizaines d'autres choses. Généralement, quand on commence à faire des scripts, on utilises des méthodes compliquées, peu efficaces, tordues… c'est pour ça que tu devrais expliquer le but de ton script. On pourrait sûrement te proposer une méthode efficace, parce que là j'ai le pressentiment que tu fais compliqué pour quelque chose qui pourrait sûrement être simple.

NB. si tu veux savoir ce que fait une commande lance :

commande --help
man commande

Dernière modification par nesthib (Le 05/09/2014, à 23:58)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne