Bash

Bash 腳本產生“意外標記‘完成’附近的語法錯誤”

  • September 6, 2021

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。

由於您在 Windows 下執行 Ubuntu,您可能同時使用 Windows 和 Linux 編輯器編輯腳本。但是,Windows 和 Linux 使用不同的行尾,這會使腳本解釋器感到困惑。

執行dos2unix您的腳本文件;這將用 Unix 行尾替換任何 Windows (CR-LF) 行尾:

$ dos2unix bag.sh

然後,按照最初的預期執行您的腳本。請注意,由於您有一個#!-line 聲明/bin/bash,因此使腳本可執行並將其執行為更有意義

$ ./bag.sh

而不是在 下執行它sh,它可能會使用另一個 shell,而不是你想要的(Bash)。

引用自:https://unix.stackexchange.com/questions/667901