我不断收到此错误:
./install.sh
./install.sh: line 28: syntax error near unexpected token `do'
./install.sh: line 28: ` do'
运行此代码时(正在进行的工作):
# Set the prompt string:
PS3='Choose folder: ';
function choose() {
# This works:
#select folder;
#do test -n "$folder" && echo You chose: $REPLY\) $folder && break;
#echo 'Wrong entry, try again.';
#continue;
#done;
select folder;
do
case $folder in
'q')
echo 'Exiting …';
break;
;;
*)
do
test -n '$folder' && echo You chose: $REPLY\) $folder && break;
echo 'Wrong entry, try again.';
continue;
done;
;;
esac;
done;
}
# Switch to glob folder location:
cd ~/Desktop;
# Create menu:
choose foo*;
# Do stuff with result of choose() here ...
# Exit program:
exit 0;
正如您可能从上面看到的,我正在尝试创建一个菜单,让我从全局文件夹列表中进行选择;不幸的是,我不明白为什么我的嵌套do
会产生我上面发布的错误。
最好,用户可以从目录列表中进行选择;如果他们输入q
,则程序退出;如果他们做出无效选择,程序会让他们再次选择,直到他们选择有效选择(或输入q
退出)。
我还没有完全弄清楚退出部分,但在我做到这一点之前,我需要克服这个do
语句错误。
问题: 是什么原因造成的syntax error near unexpected token `do'
以及如何解决?
答案1
缺少循环条件
您的语法无效。您的代码可能还存在其他问题,但此消息可能来自这样的事实:您不能do
像块一样使用关键字;您还需要有循环条件之一。
您目前拥有:
*)
do
test -n '$folder' && echo You chose: $REPLY\) $folder && break;
echo 'Wrong entry, try again.';
continue;
done;
;;
您缺少启动循环的for
、while
、 或关键字。until
答案2
一般来说,当我遇到这种类型的错误(不匹配的 if/else、do、while 等)并且找不到有问题的代码时,我会备份脚本并开始删除任何块之间的代码块,直到我找到只要有一个控制结构的骨架,通常可以帮助我找到丢失的关键字。