剛剛開始學習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中條件語句的 語法 任 何人,或者說幾乎任何人,都會在這種描述下自然地認為 和 是這種語法結構本身的一部...