Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[bash] break sur un read vide (boucle for in) - résolu
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
pti-rem
Guru
Guru


Joined: 14 Oct 2011
Posts: 472

PostPosted: Mon Nov 27, 2017 8:19 am    Post subject: [bash] break sur un read vide (boucle for in) - résolu Reply with quote

Code:
for tn in t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12; do
echo "Entrez la ligne "$tn" du tableau à compter :"
read -a $tn
done


Bonjour,

Je rentre de 1 à 12 tableaux unidimensionnels avec ce code mais je n'arrive pas à imposer un break pour sortir de la boucle sur saisie vide.

J'ai essayé de tester
Code:
[[ ${tn[*]} == "" ]]

mais ça ne tourne pas bien ; dans cette boucle,
Code:
${tn[*]}

n'est pas interprété comme le contenu du tableau.

Comment je peux faire un test pour détecter une entrée vide ?

Merci


Last edited by pti-rem on Tue Nov 28, 2017 11:28 am; edited 3 times in total
Back to top
View user's profile Send private message
pti-rem
Guru
Guru


Joined: 14 Oct 2011
Posts: 472

PostPosted: Mon Nov 27, 2017 10:12 am    Post subject: Reply with quote

Je n'ai pas trouvé pour une saisie vide mais j'ai trouvé pour gérer la sortie sur CTRL-D

Code:
for tn in t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12; do
echo "Entrez la ligne "$tn" du tableau à compter (CTRL-D pour arrêter) :"
read -a $tn
if [[ `echo $?` == 1 ]]; then break; fi
done
Back to top
View user's profile Send private message
Mr. T.
Guru
Guru


Joined: 26 Dec 2016
Posts: 477

PostPosted: Mon Nov 27, 2017 12:18 pm    Post subject: Reply with quote

Il est étonnant de créer douze tableaux consécutivement. Quel est le motif ?

Code:
declare -a tab{1..12}
for tab in tab{1..12}; do
   read -p "Dimension de $tab ? : " nb
   for (( i=0; i<nb; i++ )); do
      read -p "${tab}[$i] : " ${tab}[i];
   done
done


helecho.
Back to top
View user's profile Send private message
pti-rem
Guru
Guru


Joined: 14 Oct 2011
Posts: 472

PostPosted: Mon Nov 27, 2017 12:51 pm    Post subject: Reply with quote

C'est une tâche qu'une connaissance réalise difficilement en VBA Excel et j'ai essayé ce matin de mon côté. Il appelle ça un paradigme, moi, une simple numération ou énumération de combinaisons.
La destination est pour aider un homéopathe en retraite au choix des "sucres" en automatisant une partie de la démarche ; je n'en sais guère plus sauf qu'il y a la connaissance de métier qui élimine des combinaisons.

C'est donc pour établir à la demande une énumération d'un tableau variable de signes - parmi 68 - d'un maximum 12 lignes d'un maximum 6 colonnes ou signes ; comme par exemple ce qui suit.
Ce n'est qu'un vulgaire exemple.

Merci pour le code helecho :) ainsi que pour ta réponse.

Code:
rem@n73sm ~ $ ./compte-homeo3.sh
Entrez la ligne 1 du tableau à compter (CTRL-D pour arrêter) :
plage herbe nuit 99p voilà voile
Entrez la ligne 2 du tableau à compter (CTRL-D pour arrêter) :
autrement 12o salutations non
Entrez la ligne 3 du tableau à compter (CTRL-D pour arrêter) :
réccurent angoisse seul
Entrez la ligne 4 du tableau à compter (CTRL-D pour arrêter) :
^D


Code:
Votre entrée :

plage herbe nuit 99p voilà voile
autrement 12o salutations non
réccurent angoisse seul


Code:
La numération :

plage autrement réccurent
plage autrement angoisse
plage autrement seul
plage 12o réccurent
plage 12o angoisse
plage 12o seul
plage salutations réccurent
plage salutations angoisse
plage salutations seul
plage non réccurent
plage non angoisse
plage non seul
herbe autrement réccurent
herbe autrement angoisse
herbe autrement seul
herbe 12o réccurent
herbe 12o angoisse
herbe 12o seul
herbe salutations réccurent
herbe salutations angoisse
herbe salutations seul
herbe non réccurent
herbe non angoisse
herbe non seul
nuit autrement réccurent
nuit autrement angoisse
nuit autrement seul
nuit 12o réccurent
nuit 12o angoisse
nuit 12o seul
nuit salutations réccurent
nuit salutations angoisse
nuit salutations seul
nuit non réccurent
nuit non angoisse
nuit non seul
99p autrement réccurent
99p autrement angoisse
99p autrement seul
99p 12o réccurent
99p 12o angoisse
99p 12o seul
99p salutations réccurent
99p salutations angoisse
99p salutations seul
99p non réccurent
99p non angoisse
99p non seul
voilà autrement réccurent
voilà autrement angoisse
voilà autrement seul
voilà 12o réccurent
voilà 12o angoisse
voilà 12o seul
voilà salutations réccurent
voilà salutations angoisse
voilà salutations seul
voilà non réccurent
voilà non angoisse
voilà non seul
voile autrement réccurent
voile autrement angoisse
voile autrement seul
voile 12o réccurent
voile 12o angoisse
voile 12o seul
voile salutations réccurent
voile salutations angoisse
voile salutations seul
voile non réccurent
voile non angoisse
voile non seul


# récurrent s'écrit bien ici ;)
Back to top
View user's profile Send private message
Mr. T.
Guru
Guru


Joined: 26 Dec 2016
Posts: 477

PostPosted: Mon Nov 27, 2017 2:44 pm    Post subject: Reply with quote

Le code présenté est partiel et incomplet : la saisie de l'utilisateur n'est pas contrôlé, par exemple.

pti-rem wrote:
Comment je peux faire un test pour détecter une entrée vide ?


Il existe sûrement plusieurs façons. e.g. if [[ -z $string ]] ; then break; fi

helecho.
Back to top
View user's profile Send private message
pti-rem
Guru
Guru


Joined: 14 Oct 2011
Posts: 472

PostPosted: Mon Nov 27, 2017 2:55 pm    Post subject: Reply with quote

Tout à fait ;)

Je peux poser le script complet mais c'était pas le sujet.
Pour le contrôle, il n'y aura rien du tout ou alors une feuille de choux (un manuel) pour dire en gros que l'espace sépare les signes.

C'est juste un script test helecho.

Il fonctionne comme je le voulais.

En pratique, il faut rediriger les combinaisons sorties dans un fichier texte.

Mon script ne servira pas, je pense.
Ce sera fait avec le VBA truc...

édition :
helecho wrote:
Il existe sûrement plusieurs façons. e.g. if [[ -z $string ]] ; then break; fi

J'en ai trouvé aucune, ni celle-là ou une autre.
Back to top
View user's profile Send private message
Mr. T.
Guru
Guru


Joined: 26 Dec 2016
Posts: 477

PostPosted: Mon Nov 27, 2017 5:09 pm    Post subject: Reply with quote

Il faut bien connaître bash pour écrire des scripts bash. La lecture de la documentation (e.g. info bash, man bash) n'est pas attrayante mais est nécessaire.

Édition : Il faut avoir des notions en programmation pour comprendre les manuels.
Back to top
View user's profile Send private message
xaviermiller
Bodhisattva
Bodhisattva


Joined: 23 Jul 2004
Posts: 8706
Location: ~Brussels - Belgique

PostPosted: Tue Nov 28, 2017 8:23 am    Post subject: Reply with quote

helecho wrote:
Il faut bien connaître bash pour écrire des scripts bash. La lecture de la documentation (e.g. info bash, man bash) n'est pas attrayante mais est nécessaire.

Édition : Il faut avoir des notions en programmation pour comprendre les manuels.



Bonjour,

Je ne partage pas cet avis. Un script n'a pas toujours la vocation de contenir des algorithmes que seuls des programmeurs puissent créer.
Et des avis de ce genre ne sont pas très constructifs, ils vont plutôt faire taire les débutants qui n'oseront plus parler face à des élites...
_________________
Kind regards,
Xavier Miller
Back to top
View user's profile Send private message
xaviermiller
Bodhisattva
Bodhisattva


Joined: 23 Jul 2004
Posts: 8706
Location: ~Brussels - Belgique

PostPosted: Tue Nov 28, 2017 9:00 am    Post subject: Reply with quote

Et pour répondre à la question, j'ai peut-être une piste ici: https://stackoverflow.com/questions/17297022/break-a-bash-loop-when-return-is-hit
_________________
Kind regards,
Xavier Miller
Back to top
View user's profile Send private message
pti-rem
Guru
Guru


Joined: 14 Oct 2011
Posts: 472

PostPosted: Tue Nov 28, 2017 10:14 am    Post subject: Reply with quote

Bonjour,

Dans cette boucle for tn in, $tn prend les valeurs de t1 à t12 ; qu'il y ait une saisie ou une simple validation. Donc le test [ -z $tn ] est toujours faux.

Je n'arrivais pas à obtenir le contenu du tableau $tn saisi dans la boucle for tn in pour pouvoir l'utiliser et faire un break si il est vide.

Je viens de trouver une solution :-) avec eval et '$' pour avoir le contenu de mon tableau saisi et le tester vide ou non.

Code:
#!/bin/bash
# compte-homeo4.sh
for tn in t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12; do
echo "Entrez la ligne "$tn" du tableau à compter (touche Entrée seule ou séquence CTRL-D pour arrêter) :"
read -a $tn
eval tx='$'{$tn[*]}                               # c'est ici que tx prend la valeur de la saisie du tableau lu précédemment.
if [[ `echo $?` == 1 ]]; then break; fi           # sortie sur CTRL-D ou erreur (code de sortie d'exécution 1)
if [[ $? -eq 0 ]] && [[ -z $tx ]]; then break; fi # sortie sur saisie vide
done


Merci bien xaviermiller :-)
Je partage ton opinion.
Back to top
View user's profile Send private message
Mr. T.
Guru
Guru


Joined: 26 Dec 2016
Posts: 477

PostPosted: Tue Nov 28, 2017 3:53 pm    Post subject: Reply with quote

Le test que j'ai présenté est faux mais je ne sais pas comment procéder (trouver une solution simple et intuitive).

On peut se demander pourquoi la lecture de la documentation est nécessaire.


Last edited by Mr. T. on Tue Nov 28, 2017 3:57 pm; edited 1 time in total
Back to top
View user's profile Send private message
pti-rem
Guru
Guru


Joined: 14 Oct 2011
Posts: 472

PostPosted: Tue Nov 28, 2017 3:55 pm    Post subject: Reply with quote

helecho ?

Quel test ?

Procéder à quoi ou pour quoi ?

Je ne te comprends pas, explique.
Back to top
View user's profile Send private message
Mr. T.
Guru
Guru


Joined: 26 Dec 2016
Posts: 477

PostPosted: Tue Nov 28, 2017 3:59 pm    Post subject: Reply with quote

Vérifier que l'utilisateur a entré une donnée convenable lors de l'initialisation d'un élément d'un tableau.

Code:
if [[ -z $string ]]; then
   break
fi


helecho.
Back to top
View user's profile Send private message
pti-rem
Guru
Guru


Joined: 14 Oct 2011
Posts: 472

PostPosted: Tue Nov 28, 2017 4:02 pm    Post subject: Reply with quote

Tu devrais ouvrir un nouveau sujet helecho, celui-là est résolu et il n'est pas en rapport avec ton questionnement.

Autrement, essaie d'abord de mieux définir ce que tu définis comme « convenable »
Back to top
View user's profile Send private message
Mr. T.
Guru
Guru


Joined: 26 Dec 2016
Posts: 477

PostPosted: Tue Nov 28, 2017 4:06 pm    Post subject: Reply with quote

D'accord. Je ne vais pas ouvrir un fil de discussion car j'ai plus important à faire.
Back to top
View user's profile Send private message
pti-rem
Guru
Guru


Joined: 14 Oct 2011
Posts: 472

PostPosted: Tue Nov 28, 2017 4:11 pm    Post subject: Reply with quote

On aurait pu aller au bar, mais je suis abstinent ;-)
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum