我不习惯编写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循环不为空时,脚本正常工作。
当我在它的时候......我希望在用户输入任何内容时退出循环,即。只需按Enter键,但Bash保持循环。我怎样才能退出循环?
while read myline
do
echo ${myline}
done
echo "Hello"
while read line
do
true
done
exit 0
答案 0 :(得分:16)
你不能有一个空循环。如果您想要占位符,只需使用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
答案 1 :(得分:0)
在while循环中使用read
命令时,需要输入:
echo "Hello" | while read line ; do echo $line ; done
或使用多行:
echo "Hello" | while read line
do
echo $line
done
答案 2 :(得分:0)
你想做什么?从它的外观来看,你似乎正试图读入一个变量?
这是通过简单地说明读取值,然后可以在$
中找到例如:
read myvar
echo $myvar
正如其他人所说,循环的问题在于它是空的,这是不允许的。
答案 3 :(得分:0)
这是一种在Bash中模拟do
while
循环的方法,它总是执行一次并在最后进行测试。
while
read -r line
[[ $line ]]
do
:
done
输入空行时,循环退出。该变量在此时将为空,但如果需要,您可以将另一个变量设置为其值以保留它。
while
save=$line
read -r line
[[ $line ]]
do
:
done
答案 4 :(得分:0)
如果您要创建一个菜单并将其作为无限循环(可以选择中断)
PS3='Please enter your choice: '
options=("hello" "date" "quit")
select opt in "${options[@]}"
do
case $opt in
"hello") echo "world";;
"date") echo $(date);;
"quit")
break;;
*) echo "invalid option";;
esac
done
答案 5 :(得分:-1)
如果您在bash中输入help while
,您将获得该命令的说明。