繁体   English   中英

在Bash脚本中循环?

[英]While loop in Bash script?

我不习惯编写Bash脚本,谷歌没有帮助弄清楚这个脚本有什么问题:

#!/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

你不能有一个空循环。 如果你想要一个占位符,只需使用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

如果您要创建一个菜单,其中选项为无限循环(可选择突破)

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

PS3在这里描述

如果您在bash中键入help while您将获得该命令的说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM