CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

bash : question boucle for

sd460
sd460
Niveau 10
14 juillet 2009 à 16:32:47

bonjour,
J'ai fait sur mons script en bash pas mal de boucles for de ce style :

read -p "boucle : " fields
set fields
for field
do
//INSTRUCTION BASH
done

Ca marche bien, sauf quand la variable fields n'est aps initialisé, donc par exemple si j'appuie sur entré uniquement en réponse au read : dans ce cas, j'ai un affichage de variables que j'aimerai éviter :

BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=([0]="0")
BASH_SOURCE=([0]="./TEST")
BASH_VERSINFO=([0]="3" [1]="2" [2]="48" [3]="1" [4]="release" [5]="i486-pc-linux-gnu")
ETC ETC

Pourquoi cet affichage à lieu après une non initialistion de la variable ?

Je pensais que si j'initialisais avec une variable nulle, cela ne rentrerai pas dans la boucle...

chris_27
chris_27
Niveau 10
14 juillet 2009 à 18:06:02

Tu ne pourrais pas faire des boucles for comme tout le monde plutot ? :-p

Sinon, un test semble approprié :

[ -z "$fields" ] && fields=" "

sd460
sd460
Niveau 10
14 juillet 2009 à 18:17:18

Chris :d) Je débute en bash depuis la semaine passée, et j'ai vu les 2 syntaxes possibles, et j'aimais bien celle là.

Mais au final, ca revient au même que de faire :

for field in $fields
do
//INSTRUCTION BASH
done

Juste ?

Sinon oui , je vais rajouter un test avant l'utilisation, par contre le tiens fais quoi ?

Si $fields existe et est de longueur nulle, alors on l'initialise à "" :question:
Cela est censé régler le problème ?

chris_27
chris_27
Niveau 10
14 juillet 2009 à 18:46:25

« Juste ? » :d) oui. :-)
D'ailleurs, avec cette variante là, tu n'as même pas besoin de te soucier de l'initialisation de $fields (si c'est vide, la boucle n'est pas exécutée).

À ma connaissance, tout le monde utilise cette syntaxe (je ne connaissais pas l'autre personnellement, pourtant j'ai déjà eu à faire à pas mal de script sh).

sd460
sd460
Niveau 10
14 juillet 2009 à 20:42:25

ah ba je vais passer à cette syntaxe alors si cela suffit pour régler mon problème , je teste ca demain :-)

J'ai découvert cette syntaxe sur developpez.com dans un cours d'intro à bash.

:merci:

sd460
sd460
Niveau 10
16 juillet 2009 à 08:48:18

bon topic sur le bash, j'en profite avec une autre question.
J'ai un
$read -p "lalallala" variable
à un moment, et j'aimerai pouvoir rentrer des phrases disctinctes dans variable.
Je pensais que répondre "phrase 1" "phrase 2" donnerait 2 éléments distincts, mais en fait j'en récupère 4 sous la forme phrase 1 phrase 2.

Donc est-il possible de séparer les 2 en gardant comme caractère de séparation le caractère espace :question:

chris_27
chris_27
Niveau 10
16 juillet 2009 à 10:11:50

« Donc est-il possible de séparer les 2 en gardant comme caractère de séparation le caractère espace :question: » :d) si tes phrases sont sans espace oui… sinon c'est juste impossible.

Cela dit, tu peux considérer prendre '\n' (saut de ligne) comme séparateur. :-)))

sd460
sd460
Niveau 10
16 juillet 2009 à 10:17:23

arf, j'étais persuadé que c'était possible :-(
Du coup est-ce qu'il est envisageable de changer temporairement le caractère séparateur pendant l'exécution du script ?
Par exemble :

-Changement du caractère séparateur
-demande les phrases séparées à l'aide du caractère précédent
-Réinitialisation du caractère séparateur à "espace"

Et dans l'hypothèse ou je prends '\n' comme séparateur : déjà est-ce que '\n' est reconnu par bash comme un retour à la ligne ? ensuite, je ne peut plus demander mes phrases avec un read ? Sinon quand je fait un retour à la ligne, il va croire à une validation....

chat_chufi
chat_chufi
Niveau 10
16 juillet 2009 à 10:19:03

Complétement HS mais : en lisant le sujet j'ai cru lire boucle d'or :fou:

chris_27
chris_27
Niveau 10
16 juillet 2009 à 10:29:11

sd460 : question de bon sens. Si tu sépares tes mots et tes phrases par des espaces, comment peux-tu faire la différence entre un changement de mot dans un phrase et un changement de phrase ? (oui, la ponctuation c'est pas inutile :-p ).

« est-ce que '\n' est reconnu par bash comme un retour à la ligne ? »
:d) évidemment. :-)
chris@melange:~% echo '\n'

chris@melange:~%

Mais bon, j'ai l'impression que tu t'y prends bien mal en fait. Si tu veux entrer plusieurs lignes, pourquoi diable ne fait tu pas une boucle while avec read dedans qui s'arrête quand la réponse à read est une ligne vide ? :question:

sd460
sd460
Niveau 10
16 juillet 2009 à 10:40:24

"Mais bon, j'ai l'impression que tu t'y prends bien mal en fait. Si tu veux entrer plusieurs lignes, pourquoi diable ne fait tu pas une boucle while avec read dedans qui s'arrête quand la réponse à read est une ligne vide ?"

:d) Oui, du coup cette solution est bien plus adaptée.

:merci:

chat_chufi :d) :fou:

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware