惱人的bash語法,關於空格

2021-05-27 20:26:26 字數 1643 閱讀 4514

剛剛開始學習bash,簡單的指令碼也看懂了,模仿著寫,怎麼都不對阿。。。

總是這樣的錯誤:

syntax error near unexpected token `then'

或 if[ 1 -ne 1 ]: command not found

或syntax error: unexpected end of file

讓我一一道來:

第乙個和第二個是一樣的錯誤,都是因為惱人的空格引起的,bash對空格的要求很嚴格,在「if」與「 [ 」之間,「[ 」與變數之間必須有空格......

第三個問題是,檔案結尾的問題,原因基本有二,一是檢查各條件於迴圈的結束,if與fi,do與done,begin與end要成對出現,如果只用了if但是沒有fi,就會提示這樣的錯誤;

二是dos檔案傳輸到unix系統時,會在每行的結尾多乙個^m,在vi的時候,當你用如下命令:

>>vi dos.txt

>>:set fileformat=unix

>>:w

就會看到這些存在於每行結尾的^m符號,然後把^m刪除就可以了

以下內容**:

舉例如下:

1:定義變數時, =號的兩邊不可以留空格.

eg:gender=femal------------right

gender =femal-----------wrong

gender= femal-----------wrong

2條件測試語句 [ 符號的兩邊都要留空格.

eg:if [ $gender = femal ]; then-------right.

echo "you are femal";

fiif[ $gender...-----------------------wrong

if [$gender...----------------------wrong.

3條件測試的內容,如果是字串比較的話, 比較符號兩邊要留空格!

eg:if [ $gender = femal ]; then-------right.

if [ $gender= femal ]; then--------wrong.

if [ $gender=femal ]; then---------wrong.

4如果if 和 then寫在同一行, 那麼,注意, then的前面要跟上 ; 號.

如果 then 換行寫, 那麼也沒問題.

eg:if [ $gender = femal ]; then-------right.

if [ $gender = femal ]

then-------------------------------right.

if [ $gender = femal ] then-------wrong. then前面少了 ; 號.

提示出錯資訊:

syntax error near unexpected token then

同理,還有很多出錯資訊 比如

syntax error near unexpected token fi 等都是這樣引起的.

5if 後面一定要跟上 then. 同理

elif 後面一定要跟上 then.

不然提示出錯資訊:

syntax error near unexpected token else

bash下的空格

bash空格的那點事 空格,乙個看不見的字元,很不起眼,也正由於不起眼,很多人經常忽略它,導致 出錯,卻還找不著北。這裡,我們來聊聊bash中空格的那點事。先了解下bash中什麼時候該用空格,什麼時候不該用。1.等號賦值兩邊不能有空格 2.命令與選項之間需要空格 3.管道兩邊空格可有可無 我們來看看...

Bash空格的那點事

bash空格的那點事 空格,乙個看不見的字元,很不起眼,也正由於不起眼,很多人經常忽略它,導致 出錯,卻還找不著北。這裡,我們來聊聊bash中空格的那點事。先了解下bash中什麼時候該用空格,什麼時候不該用。1.等號賦值兩邊不能有空格 2.命令與選項之間需要空格 3.管道兩邊空格可有可無 我們來看看...

關於bash 中 if 語法結構的廣泛誤解

我打賭正在看這篇文章的你,超過99 的可能性你對這個問題的理解是錯的.或者至少是有偏差的.我深信這是一種教育法上的廣泛錯誤,那就是告訴大家說 if condition then fi 這是bash中條件語句的 語法 任 何人,或者說幾乎任何人,都會在這種描述下自然地認為 和 是這種語法結構本身的一部...