Bash 脚本生成“意外标记‘完成’附近出现语法错误”

Bash 脚本生成“意外标记‘完成’附近出现语法错误”

shell 脚本如下所示:

#!/bin/bash
while [ true ]; do
    clear
    date
    who
    sleep 5
done 

如果我运行 int,我会得到以下结果:

yuikus@DESKTOP-VTJ0OG4:~$ cd /mnt/d/lab_oc_1/lab_oc_2/
yuikus@DESKTOP-VTJ0OG4:/mnt/d/lab_oc_1/lab_oc_2/$ sh bag.sh
bag.sh: 7: Syntax error: "done" unexpected (expecting "do")
yuikus@DESKTOP-VTJ0OG4:/mnt/d/lab_oc_1/lab_oc_2/$ bash bag.sh
bag.sh: line 7: syntax error near unexpected token `done'
bag.sh: line 7: `done '

为什么不起作用?我在 Windows 上使用 Ubuntu 运行。

答案1

由于您在 Windows 下操作 Ubuntu,因此您可能会同时使用 Windows 和 Linux 编辑器编辑脚本。但是,Windows 和 Linux 使用不同的行结束符,这可能会使脚本解释器感到困惑。

运行dos2unix你的脚本文件;这将用 Unix 行结尾替换任何 Windows (CR-LF) 行结尾:

$ dos2unix bag.sh

然后,按照最初的预期运行脚本。请注意,由于您有一个#!-line 声明/bin/bash,因此使脚本可执行并将其运行为更有意义

$ ./bag.sh

而不是在 下运行它sh,这可能会使用不同于您想要的 shell (Bash) 的另一种 shell。

相关内容