而在Bash脚本循环?

我不习惯编写Bash脚本,Google也没有帮忙弄清楚这个脚本有什么问题:

#!/bin/bash while read myline do done echo "Hello" while read line do done exit 0 

我得到的输出是:

 ./basic.agi: line 4: syntax error near unexpected token 'done' ./basic.agi: line 4: 'done' 

我的bash版本是:

 GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu) 

谢谢。


编辑:当while循环不为空时,脚本工作正常。

虽然我在…我希望退出循环,当用户input什么,即。 只需按Enter键,但Bash不断循环。 我怎样才能退出循环?

 while read myline do echo ${myline} done echo "Hello" while read line do true done exit 0 

Solutions Collecting From Web of "而在Bash脚本循环?"

你不能有一个空的循环。 如果你想要一个占位符,只需使用true

 #!/bin/bash while read myline do true done 

或者更可能的是,对输入做一些有用的事情:

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

至于你的第二个问题,关于如何退出循环,当用户只是没有别的按下ENTER时,你可以做一些事情:

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

在while循环中使用read命令时,需要输入:

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

或使用几行:

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

你想做什么? 从它的外观看来,你正试图读入一个变量?

这是通过简单地说明读取的值可以在$内部找到

例如:

 read myvar echo $myvar 

正如其他人所说,循环的麻烦是不允许的空。

这是一种模拟Bash中的do while循环的方法,它总是执行一次,并在最后执行测试。

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

当输入空行时,循环退出。 这个变量在这个时候是空的,但是如果需要的话,你可以设置另外一个变量来保存它。

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

如果您在bash中键入help while则会得到命令的解释。