扒一扒shell中的怪異語法

shell腳本給運維工做帶了很大的方便,但其中也有一些怪異的語法規則,老是容易給人挖坑。程序員

  • 對空格的使用
    • 在if else語法中,if與後面的表達式必須有空格隔開,這對於熟悉其餘語言的程序員來講很容易將其忽略,致使面對語法錯誤的提示百思不得其解。
    • if [ expression ]
      then
         Statement(s) to be executed if expression is true
      fi
    • 在表達多個元素時,元素之間是採用空格個來分隔,好比定義數組時:
      • array_name=(value0 value1 value2 value3)
      • 又好比做爲函數參數時:
      • printf "%d %s\n" 1 "abc"。
      • 爲何不能使用逗號呢?來對比一下看看哪一種看起來更舒服:
        • array_name=(value0,value1,value2,value3),
        • printf "%d %s\n",1,"abc
    • 另外一個更怪異的地方是,在定義變量時,變量名和等號之間不能有空格,這也太奇葩了!
      • myNum =10 (錯誤)
  • shell中另外一個怪異的地方是作一樣一件事能夠有好幾種表達方式:
    • 好比變量引用,能夠是$myvar,也能夠是${myvar},從避免代碼看起來混亂的角度看,應該強制使用大括號將變量與其餘字符進行分隔比較合理。能夠對比下下面兩種狀況,哪種看起來更舒服,更容易區分哪裏是變量哪裏是字符串字面量。
      • echo "there is "$num1" person and "$num2" room"
      • echo "there is ${num1} person and ${num2} room"
    • 好比循環,能夠用for,也能夠用while,還有until,實際上until用處並不大,通常都能用while代替掉,爲了一個不多用到的狀況設計一個專門的語法是不太值得的。
    • 又好比函數定義中,如是不加return語句,就返回最後一條命令運行結果,這實在沒有必要,這種節省return的狀況反而容易把人給繞暈,看代碼的人得分析一番才搞得清這個函數要返回的倒底是什麼。
    • 還好比特殊變量:$@和$*,都表示全部參數,雖然有一些小小區別,可是爲了這一點小區別設計兩個語法實在有點小題大做了!
相關文章
相關標籤/搜索