修复意外令牌附近的 Bash 语法错误
已发表: 2022-05-30Linux Bash 终端中的编码已成为编码领域的主要实践。 软件工程师和学习编码语言的学生会遇到各种错误。 如果你反复看到 Syntax error near unexpected token '(' 或 Bash syntax error near unexpected token 等错误,可以尝试依赖文章中描述的方法,成为一名熟练的编码者。阅读文章中描述的方法命令描述并修复文件命令行中的错误。
内容
- 如何修复意外令牌附近的 Bash 语法错误
- 方法 1:手动修复每个命令行中的错误
- 第一步:读取文件内容
- 步骤二:删除 Windows 换行符
- 第三步:为新创建的文件设置权限
- 第四步:格式化文件中的代码
- 方法二:重写代码
- 方法三:使用 Dos2unix.exe 命令
如何修复意外令牌附近的 Bash 语法错误
Linux Bash 是基于 Linux 的系统的命令行解释器,是 Bourne Shell 或 sh 的替代品。 这些文件在 Linux Bash 脚本中使用 .sh 格式命名。 如果 shell 脚本中的代码存在格式问题,您可能会遇到语法错误。 如果错误接近(字符,shell 会在该行提示您错误,并在相应的行中显示错误。由于 Linux Bash 是解释器,因此错误的行将返回给您终端,它将停止扫描脚本中的其余命令。因此,您需要修复特定命令行中的错误并继续下一步以修复 shell 脚本中的意外令牌错误。语法的原因Linux Bash 中意外令牌附近的错误在本节中列出如下:
- 使用转义序列编码- 如果您使用 Bash 脚本编写代码,则脚本中的转义序列或引号可能会导致错误。 转义序列和引号必须以正确的格式写入以修复错误。
- 编码文件中的语法不正确- 如果命令以错误的语法编写(例如更改循环顺序),代码中的语法可能会出现语法错误。
- 命令的错误使用 -如果您没有正确使用命令,例如不正确的值分配,您可能会遇到语法错误。
- 系统中的操作系统不兼容 -如果编码脚本的外壳在 Unix 和 DOS 系统之间不兼容,您可能会遇到意外错误。
- bash shell 脚本中的问题 - 在从另一个系统复制的文件的 bash shell 脚本中运行的问题可能会导致意外的令牌错误。
考虑使用以下命令行在 Linux Bash 脚本中创建的名为example.sh的文件,以进行解释。 示例文件可能会出现语法错误,并包含所有可以在 shell 脚本中使用的命令。
str = '脚本中'(示例文件)'的第一个命令行' str= [(1,2),(3,4)] 如果 [ $day == “星期一” ] 那么 回声“星期一” 别的 回声“不星期一” 菲 {0..2} 中的变量; 然后 做回声命令1; 回显命令2; 回声命令3; 回显命令4; 完毕 虽然是真的; 如果 [ $ day == “周一” ]; 然后回显“mon”; 否则回显“不是星期一”; 完毕; 菲
方法 1:手动修复每个命令行中的错误
修复错误的第一种方法是在脚本的每个命令行中手动修复语法错误。 本节将讨论解决命令行中意外标记附近的语法错误的步骤。 下面描述了在终端中修复意外令牌错误的过程。 通过键入./example.sh命令并按Enter键在终端中运行该文件。
2. 请注意以下结果中命令行中出现意外令牌错误的行。
3. 分别按照下面讨论的方法修复每一行的错误并保存文件。
4. 更改后再次运行文件,检查文件的语法错误是否已解决。
另请阅读:如何在 Windows 10 上安装 Linux Bash Shell
第一步:读取文件内容
解决命令行中的语法错误的第一步是在终端中读取文件。 如果文件存在问题,您可能无法查看该文件。 查看文件的常规做法是使用命令./example.sh运行文件,但您不能修改文件上的内容。 查看文件内容和修改命令行以修复意外标记“(”附近的语法错误的选项将在下面讨论。
选项 1:通过 CAT 命令
第一个选项是使用cat命令在 shell 脚本中查看文件。 通过在终端中键入命令cat –v example.sh ,使用 cat 命令读取包含意外令牌错误的文件内容。
注 1: example.sh用于说明目的,您需要键入出现意外令牌错误的文件的名称。
注意 2: cat –v 命令用于显示所有可能表示回车或不间断空格的不可见字符。
选项 2:通过 VX 命令
如果您无法使用 cat 命令,您可以尝试使用 vx 命令查看和更改文件中的命令,具体步骤如下。 在终端中键入sh –vx ./example.sh命令以打开文件。
选项 3:通过 od –a 命令
3.如果命令行中有几个看不见的字符,可以使用od –a命令查看文件。 如果文件的内容在代码文件中不可见,可以尝试使用命令od –a example.sh读取文件来修改代码。
步骤二:删除 Windows 换行符
如果 shell 脚本中有 Windows 换行符,您可以使用控制台命令删除换行符并将代码行复制到新文件以修复错误。
在终端中输入以下命令,将文件中的内容保存到另一个名为correctedexample.sh的文件中,以删除脚本中的Windows 换行符。
tr –d '\r' <example.sh> 更正的example.sh
第三步:为新创建的文件设置权限
您需要对新创建的文件设置权限以编辑该文件,以便该文件可以在 shell 中执行。 在终端中键入命令chmod 755correctedexample.sh以提供对文件的权限并运行该文件。 您现在可以查看更正后的文件并修复格式问题并修复文件中意外标记“(”附近的语法错误。
第四步:格式化文件中的代码
第二步是单独格式化代码行并在文件上手动更改命令行。 本节下面将讨论格式化文件以修复意外标记“(”附近的语法错误的选项。
选项 1:用双引号替换单引号
如果您在命令行中使用单引号,则需要通过将单引号替换为双引号来更改命令以修复语法错误。 在example.sh文件中,删除命令中带有'和'或单引号的代码行,并将单引号替换为双引号或“和'' 。 这里,在示例文件中,您需要将代码更改为str= “脚本中“\(示例文件)\”的第一个命令行”
注意:双引号对于参数类型命令是必需的,例如str= “[(1,2),(3,4)]” 。
另请阅读: 2022 年 20 个最佳轻量级 Linux 发行版
选项 2:将 $ 添加到字符串行
如果您在脚本中添加了字符串值,则需要在字符串值中添加 $ 以修复脚本中的语法错误。 为带有字符串值的命令行添加$以修复意外错误。 在这里,在示例文件中,将命令行更改为;
str= $ '脚本中'\(示例文件)\'的第一个命令行'
注意:如果您在字符串值中使用$ ,则可以绕过反斜杠转义序列,因为命令行由 ANSI C 标准解码。 换句话说,通过使用 $ 作为字符串值,您可以避免在命令行中使用双引号而不是单引号。
选项 3:将制表符转换为空格
您在命令中的两个语句之间留下的空格必须是空格而不是制表符才能修复脚本中的语法错误。 如果您在 Cygwin 上遇到错误,您可以尝试将代码中的制表符转换为空格以修复错误。 命令行如下所示;
做回声命令1; 回显命令2; 回声命令3; 回显命令4; 完毕
应按如下所示重写上述命令以修复错误。
做回声命令1; 回显命令2; 回声命令3; 回显命令4; 完毕
选项 4:使用转义字符
如果您使用 bash 字符,请务必使用转义字符和 bash 字符来修复语法错误。 括号或()是文件中的 bash 特殊字符,因此,您需要在命令行中使用转义字符或反斜杠来转义普通字符以执行命令。 str= 'First command line of \'(example file)\' in the script'命令不会在终端中出现错误,因为使用了转义字符。
另请阅读:如何在 Linux 上加入我们
选项 5:在字符之间使用空格
shell 脚本通过默认值识别脚本中的命令和语句。 您需要确保正确使用字符之间的空格,以便 shell 可以识别脚本中给出的命令。 空格是用于区分命令行中的两个字符的字符。 在代码中, if和[之间没有空格,这会导致意外的令牌错误,因为 shell 无法识别if[命令。 如果代码改为if [ $ day == “mon” ]; 如果被shell识别,则可以通过shell公告命令解决该错误。
选项 6:对语句使用命令分隔符
shell 脚本中的各种命令需要分成语句,以便终端识别各个命令。 您需要使用命令分隔符来修复 Linux Bash 中的语法错误。 命令中的语句需要用命令分隔符分隔,例如分号或; 或按Enter键换行。 例如,代码中的命令if [ $ day == “mon” ] 然后必须更改为if [ $ day == “mon” ]; 然后修复错误。 由于分号用作字符[和then之间的命令分隔符,因此您可以修复此错误。
选项 7:删除附加语句
有时,您可能添加了额外的语句,或者在多个嵌套循环的情况下混淆了代码。 您需要删除命令行上的附加语句以修复 Linux Bash 中意外标记 '(' 附近的语法错误。bash 循环for...done或构造结构if...fi需要使用正确的语法。示例文件在for循环中有错误的语法在if语句中使用了术语then 。将代码修改为以下代码将修复意外的令牌错误。语句then是代码中的附加语句并删除了术语将修复错误。
{0..2} 中的变量; 做回声命令1; 回显命令2; 回声命令3; 回显命令4; 完毕
选项 8:确保语句的结束顺序正确
如果您在 shell 脚本中使用许多嵌套或条件构造语句,则必须确保循环按照它们打开的顺序关闭。 您可以使用新的行分隔符来避免与循环发生冲突。 关闭嵌套循环和条件语句的顺序应正确,不得更改。 代码中的循环while true; 如果 [ $ day == “周一” ]; 然后回显“mon”; 否则回显“不是星期一”; 完毕; fi需要以正确的顺序关闭。 如下所示更改代码可以修复意外的令牌错误,因为关闭语句的顺序已更正。
虽然是真的; 如果 [ $ day == “周一” ]; 然后回显“mon”; 否则回显“不是星期一”; 菲; 完毕
另请阅读:什么是命令行解释器?
方法二:重写代码
如果您已复制代码并将其粘贴到终端上的新文件中,您可以尝试手动重写代码以修复错误。 如果您编写的代码没有在 shell 脚本中出现任何格式错误,则可以修复代码中的错误。 这是因为文本编辑器(例如 Microsoft Word)中的隐藏字符和格式问题,您可能曾经复制和粘贴代码可能会出现错误。
方法三:使用 Dos2unix.exe 命令
如果您使用的是 Unix 操作系统,您可以编写代码,将换行符作为\n移动到文件中的下一行。 但是,如果您使用的是 Windows 操作系统,则需要使用回车和换行符或文件中的\r\n移动到代码中的下一行。 如果您在 Cygwin 中执行在 Windows 操作系统中编写的代码,您可能会在意外标记 '(' 附近出现语法错误。
要修复此错误,您需要使用DOS 到 Unix命令行工具作为文本文件格式转换器清除回车符。 在终端中键入以下命令作为dos2unix.exe example.sh ,您可以将文件转换为 Unix 格式。
推荐的:
- 如何在 Android 上创建电报帐户
- 修复 Windows 10 上的运行时错误 C++
- 如何永久删除 Github 帐户
- 适用于 Linux 的 14 大最佳显卡
本文讨论了修复脚本中意外标记“(”附近的 Bash 语法错误的基本方法。如果您使用的是 Linux Bash,则可以使用本节中介绍的方法来修复意外标记附近的 Bash 语法错误。如果您已阅读整篇文章,发现内容很有用,请在评论部分告诉我们您的建议和疑问。