修復意外令牌附近的 Bash 語法錯誤

已發表: 2022-05-30
修復意外令牌附近的 Bash 語法錯誤

Linux Bash 終端中的編碼已成為編碼領域的主要實踐。 軟件工程師和學習編碼語言的學生會遇到各種錯誤。 如果你反复看到 Syntax error near unexpected token '(' 或 Bash syntax error near unexpected token 等錯誤,可以嘗試依賴文章中描述的方法,成為一名熟練的編碼者。閱讀文章中描述的方法命令描述並修復文件命令行中的錯誤。

修復意外令牌附近的 Bash 語法錯誤

內容

  • 如何修復意外令牌附近的 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”; 否則回顯“不是星期一”; 完畢; 

linux bash中帶有命令行的示例文件

方法 1:手動修復每個命令行中的錯誤

修復錯誤的第一種方法是在腳本的每個命令行中手動修復語法錯誤。 本節將討論解決命令行中意外標記附近的語法錯誤的步驟。 下面描述了在終端中修復意外令牌錯誤的過程。 通過鍵入./example.sh命令並按Enter終端中運行該文件。

example.sh 文件打開命令。修復意外令牌附近的 Bash 語法錯誤

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 命令用於顯示所有可能表示回車或不間斷空格的不可見字符。

example.sh 文件在 linux 終端中打開 cat 命令

選項 2:通過 VX 命令

如果您無法使用 cat 命令,您可以嘗試使用 vx 命令查看和更改文件中的命令,具體步驟如下。 在終端中鍵入sh –vx ./example.sh命令以打開文件。

sh vx example.sh 命令。修復意外令牌附近的 Bash 語法錯誤

選項 3:通過 od –a 命令

3.如果命令行中有幾個看不見的字符,可以使用od –a命令查看文件。 如果文件的內容在代碼文件中不可見,可以嘗試使用命令od –a example.sh讀取文件來修改代碼。

od linux 終端中的 example.sh 命令

步驟二:刪除 Windows 換行符

如果 shell 腳本中有 Windows 換行符,您可以使用控制台命令刪除換行符並將代碼行複製到新文件以修復錯誤。

在終端中輸入以下命令,將文件中的內容保存到另一個名為correctedexample.sh的文件中,以刪除腳本中的Windows 換行符。

 tr –d '\r' <example.sh> 更正的example.sh 

控制台命令刪除 Windows 換行符。修復意外令牌附近的 Bash 語法錯誤

第三步:為新創建的文件設置權限

您需要對新創建的文件設置權限以編輯該文件,以便該文件可以在 shell 中執行。 在終端中鍵入命令chmod 755correctedexample.sh以提供對文件的權限並運行該文件。 您現在可以查看更正後的文件並修復格式問題並修復文件中意外標記“(”附近的語法錯誤。

chmod 755 更正example.sh 命令在linux終端中設置權限

第四步:格式化文件中的代碼

第二步是單獨格式化代碼行並在文件上手動更改命令行。 本節下面將討論格式化文件以修復意外標記“(”附近的語法錯誤的選項。

選項 1:用雙引號替換單引號

如果您在命令行中使用單引號,則需要通過將單引號替換為雙引號來更改命令以修復語法錯誤。 在example.sh文件中,刪除命令中帶有''單引號的代碼行,並將單引號替換為雙引號'' 。 這裡,在示例文件中,您需要將代碼更改為str= “腳本中“\(示例文件)\”的第一個命令行”

注意:雙引號對於參數類型命令是必需的,例如str= “[(1,2),(3,4)]”

在 example.sh bash 文件中用雙引號替換單引號

另請閱讀: 2022 年 20 個最佳輕量級 Linux 發行版

選項 2:將 $ 添加到字符串行

如果您在腳本中添加了字符串值,則需要在字符串值中添加 $ 以修復腳本中的語法錯誤。 為帶有字符串值的命令行添加$以修復意外錯誤。 在這裡,在示例文件中,將命令行更改為;

 str= $ '腳本中'\(示例文件)\'的第一個命令行'

注意:如果您在字符串值中使用$ ,則可以繞過反斜杠轉義序列,因為命令行由 ANSI C 標準解碼。 換句話說,通過使用 $ 作為字符串值,您可以避免在命令行中使用雙引號而不是單引號。

字符串行中的美元符號。修復意外令牌附近的 Bash 語法錯誤

選項 3:將製表符轉換為空格

您在命令中的兩個語句之間留下的空格必須是空格而不是製表符才能修復腳本中的語法錯誤。 如果您在 Cygwin 上遇到錯誤,您可以嘗試將代碼中的製表符轉換為空格以修復錯誤。 命令行如下所示;

 做迴聲命令1; 回顯命令2; 迴聲命令3; 回顯命令4; 完畢

example.sh bash 文件中 do echo 命令中使用的選項卡

應按如下所示重寫上述命令以修復錯誤。

 做迴聲命令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之間的命令分隔符,因此您可以修復此錯誤。

編輯 bash 文件中的 example.sh 命令。修復意外令牌附近的 Bash 語法錯誤

選項 7:刪除附加語句

有時,您可能添加了額外的語句,或者在多個嵌套循環的情況下混淆了代碼。 您需要刪除命令行上的附加語句以修復 Linux Bash 中意外標記 '(' 附近的語法錯誤。bash 循環for...done或構造結構if...fi需要使用正確的語法。示例文件在for循環中有錯誤的語法在if語句中使用了術語then 。將代碼修改為以下代碼將修復意外的令牌錯誤。語句then是代碼中的附加語句並刪除了術語將修復錯誤。

 {0..2} 中的變量; 做迴聲命令1; 回顯命令2; 迴聲命令3; 回顯命令4; 完畢

在 example.sh bash 文件中編輯 for 命令

選項 8:確保語句的結束順序正確

如果您在 shell 腳本中使用許多嵌套或條件構造語句,則必須確保循環按照它們打開的順序關閉。 您可以使用新的行分隔符來避免與循環發生衝突。 關閉嵌套循環和條件語句的順序應正確,不得更改。 代碼中的循環while true; 如果 [ $ day == “週一” ]; 然後回顯“mon”; 否則回顯“不是星期一”; 完畢; fi需要以正確的順序關閉。 如下所示更改代碼可以修復意外的令牌錯誤,因為關閉語句的順序已更正。

 雖然是真的; 如果 [ $ day == “週一” ]; 然後回顯“mon”; 否則回顯“不是星期一”; 菲; 完畢

執行 while 命令。修復意外令牌附近的 Bash 語法錯誤

另請閱讀:什麼是命令行解釋器?

方法二:重寫代碼

如果您已復制代碼並將其粘貼到終端上的新文件中,您可以嘗試手動重寫代碼以修復錯誤。 如果您編寫的代碼沒有在 shell 腳本中出現任何格式錯誤,則可以修復代碼中的錯誤。 這是因為文本編輯器(例如 Microsoft Word)中的隱藏字符和格式問題,您可能曾經復制和粘貼代碼時可能會出現錯誤。

方法三:使用 Dos2unix.exe 命令

如果您使用的是 Unix 操作系統,您可以編寫代碼,將換行符作為\n移動到文件中的下一行。 但是,如果您使用的是 Windows 操作系統,則需要使用回車和換行符或文件中的\r\n移動到代碼中的下一行。 如果您在 Cygwin 中執行在 Windows 操作系統中編寫的代碼,您可能會在意外標記 '(' 附近出現語法錯誤。

要修復此錯誤,您需要使用DOS 到 Unix命令行工具作為文本文件格式轉換器清除回車符。 在終端中鍵入以下命令作為dos2unix.exe example.sh ,您可以將文件轉換為 Unix 格式。

dos2unix.exe example.sh 命令。修復意外令牌附近的 Bash 語法錯誤

推薦的:

  • 如何在 Android 上創建電報帳戶
  • 修復 Windows 10 上的運行時錯誤 C++
  • 如何永久刪除 Github 帳戶
  • 適用於 Linux 的 14 大最佳顯卡

本文討論了修復腳本中意外標記“(”附近的 Bash 語法錯誤的基本方法。如果您使用的是 Linux Bash,則可以使用本節中介紹的方法來修復意外標記附近的 Bash 語法錯誤。如果您已閱讀整篇文章,發現內容很有用,請在評論部分告訴我們您的建議和疑問。