9
votes

Alors que la boucle dans le script Bash?

Je ne suis pas habitué à écrire des scripts Bash et Google n'a pas aidé à déterminer ce qui ne va pas avec ce script: xxx pré>

la sortie que je reçois est: p> xxx pré>

et mon bash code> est: p> xxx pré>

merci. p>


Edit: Le script fonctionne correctement lorsque la boucle tandis que la boucle n'est pas vide. P>

Pendant que je suis à elle ... Je m'attendais à quitter la boucle lorsque l'utilisateur ne tape rien, c'est-à-dire. Appuyez simplement sur la touche Entrée, mais BASH continue de boucler. Comment puis-je quitter la boucle? P>

while read myline
do
        echo ${myline}
done

echo "Hello"
while read line
do
        true
done

exit 0


1 commentaires

Cette simple liste de lecture fonctionne jusqu'à la "fin de fichier". Vous pouvez donner une fin de fichier en tapant contrôle-d.


6 Réponses :


16
votes

Vous ne pouvez pas avoir une boucle vide. Si vous voulez un espace réservé, il suffit d'utiliser true code>. xxx pré>

ou, plus probable, faites quelque chose d'utile avec l'entrée: p> xxx Pré>


Quant à votre deuxième question, sur la manière de quitter la boucle lorsque l'utilisateur appuie simplement sur entrez kbd> avec rien d'autre, vous pouvez faire quelque chose: P>

#!/bin/bash
read line
while [[ "$line" != "" ]] ; do
    echo "You entered [$line]"
    read line
done


2 commentaires

Merci encore. La prochaine fois, je posterai une nouvelle question à la place.


pendant:; faire :; fait travail (: est un synonyme de true )



-1
votes

Si vous tapez Aide pendant dans BASH, vous obtiendrez une explication de la commande.


0 commentaires

0
votes

Lorsque vous utilisez la commande lisez code> dans une boucle tandis que vous devez entrer: xxx pré>

ou en utilisant plusieurs lignes: p>

echo "Hello" | while read line
    do
    echo $line
done


0 commentaires

0
votes

Qu'essayez-vous de faire? Du regard de celui-ci, il semble que vous essayiez de lire une variable?

Ceci est fait en indiquant simplement la lecture de la valeur peut alors être trouvée à l'intérieur de $

ex: < Pré> xxx

Comme d'autres ont déclaré que les autres ont déclaré que le problème avec la boucle est qu'il est vide qui n'est pas autorisé.


0 commentaires

1
votes

Ceci est un moyen d'émuler un do code> tandis que code> en boucle de bash, il s'exécute toujours une fois et effectue le test à la fin.

while
    save=$line
    read -r line
    [[ $line ]]
do
    :
done


2 commentaires

Dennis, avez-vous voulu dire à init ligne avec autre chose que '' ? Il me semble que la boucle ne commencera jamais. Ma compréhension est que jusqu'à ce que ce soit simplement la version de condition négative de tout en garantissant une exécution minimale d'une itération. Je me trompe peut-être mais le manuel de Bash semble indiquer que c'est aussi le cas.


@paxdiablo: Vous êtes correct. D'autres langues ont une boucle do avec un test à la fin, mais Bash ne le fait pas. Ma réponse ici montre comment émuler un faire pendant en boucle Frapper. J'ai mis à jour cette réponse pour correspondre à celle-là.



0
votes

Si vous souhaitez créer un menu avec des choix comme une boucle infinie (avec le choix de sortir) xxx

PS3 est décrit ici


0 commentaires