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: la sortie que je reçois est: p> et mon merci. 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> bash code> est: p>
Edit: Le script fonctionne correctement lorsque la boucle tandis que la boucle n'est pas vide. P> while read myline
do
echo ${myline}
done
echo "Hello"
while read line
do
true
done
exit 0
6 Réponses :
Vous ne pouvez pas avoir une boucle vide. Si vous voulez un espace réservé, il suffit d'utiliser ou, plus probable, faites quelque chose d'utile avec l'entrée: p> 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> true code>.
#!/bin/bash
read line
while [[ "$line" != "" ]] ; do
echo "You entered [$line]"
read line
done
Merci encore. La prochaine fois, je posterai une nouvelle question à la place.
pendant:; faire :; fait code> travail (: code> est un synonyme de true code>)
Si vous tapez Aide pendant CODE> dans BASH, vous obtiendrez une explication de la commande. P>
Lorsque vous utilisez la commande ou en utilisant plusieurs lignes: p> lisez code> dans une boucle tandis que vous devez entrer: echo "Hello" | while read line
do
echo $line
done
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 $ p>
ex: p> < Pré> xxx pré>
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é. p> p>
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
Dennis, avez-vous voulu dire à init ligne code> avec autre chose que '' code>? 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 code> avec un test à la fin, mais Bash ne le fait pas. Ma réponse ici montre comment émuler un faire code> pendant code> en boucle Frapper. J'ai mis à jour cette réponse pour correspondre à celle-là.
Si vous souhaitez créer un menu avec des choix comme une boucle infinie (avec le choix de sortir) PS3 est décrit ici p> p>
Cette simple liste de lecture fonctionne jusqu'à la "fin de fichier". Vous pouvez donner une fin de fichier en tapant contrôle-d.