3 done:意外令牌“done”附近的 BASH语法错误

任何想法的问题可能是什么?

我的代码是:

#!/bin/bash
while :
do
echo "Press [CTRL+C] to stop.."
sleep 1
done

将其保存为.sh 并运行 bash file.sh

CentOS 6 32 位

第一次使用 BASH,需要它的东西一个简单的无限循环。

46
Runcat-v file.sh.

您的文件中很可能有回车符或无空格。cat -v将分别显示为^MM-BM-M-。它将类似地显示您可能已经进入文件的任何其他奇怪字符。

删除 Windows 换行符

tr -d '\r' < file.sh > fixedfile.sh
12

我在 Cygwin 上得到同样的错误;我做了以下(其中一个固定它):

ConvertedTABStoSPACES randos2unixon the.(ba)shfile
7

你得到的错误是什么?

$ bash file.sh
test.sh: line 8: syntax error: unexpected end of file

如果您收到该错误,则可能有错误的行尾。Unix 在文件末尾使用<LF>,而 Windows 使用<CR><LF>。该<CR>字符被解释为字符。

您可以使用od -a test.sh查看文件中的不可见字符。

$ od -a test.sh
0000000    #   !   /   b   i   n   /   b   a   s   h  cr  nl   #  sp  cr
0000020   nl   w   h   i   l   e  sp   :  cr  nl   d   o  cr  nl  sp  sp
0000040   sp  sp   e   c   h   o  sp   "   P   r   e   s   s  sp   [   C
0000060    T   R   L   +   C   ]  sp   t   o  sp   s   t   o   p   "  cr
0000100   nl  sp  sp  sp  sp   s   l   e   e   p  sp   1  cr  nl   d   o
0000120    n   e  cr  nl                                                
0000124

sp代表空格,ht代表 tab,cr代表<CR>nl代表<LF>。请注意,所有行都以cr结尾,后跟nl字符。

如果cat命令采用-v参数,也可以使用cat -v test.sh

如果你的盒子上有dos2unix,你可以使用该命令来修复你的文件:

$ dos2unix test.sh
4

可能会帮助别人:我遇到了同样的问题,而我做了一些“复制粘贴”从一个侧面的 Microsoft Word 文档,在那里我做笔记,我的 shell 脚本(S)。

重新编写,手动,脚本中完全相同的代码刚刚解决了这个问题。

起初这是相当不可理解的,我认为 Word 的隐藏字符和 / 或格式是问题。显而易见,但不可见...我为此损失了大约一个小时(我不是 shell 专家,你可能会猜到...)

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(258)
易班自动打卡小程序:将易失性阵列转换为非易失性阵列
上一篇
电脑上用什么编程:用黑色背景上的白色文本编程
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(17条)