shell編寫總結

變量引用

  • $(VAR): 會將VAR當做一條命令來執行
  • $VAR’: 單引號中包含的變量, 不會被引用, 仍然輸出$VAR
  • $VAR”: 雙引號中包含的變量, 會被引用成$VAR的值輸出
  • “: 優先執行其中的命令, 用在字符串中時, 僅在”“當中有效

有時需要在一個字符串變量中定義一個命令並預先包含一個變量名, 在使用時再轉換成變量名, 此時可通過eval命令來達到目的.

CMD='eval echo $VALUE'
VALUE="Hello"

$CMD
# 執行echo "Hello", 輸出"Hello"

特殊變量

  • $0: 獲取當前執行腳本的文件名,包括路徑
  • $n: 獲取當前執行的shell腳本的第N個參數, n=1..9, 當n爲0時表示腳本的文件名, 如果n大於9, 可用大括號括起來如${10}
  • $@: 這個程序的所有參數”1"" 2” “$3”…, 這是將參數傳遞給其他程序的最佳方式, 因爲會保留所有內嵌在每個參數裏的空白
  • $*: 獲取當前shell的所有參數,會將所有的命令行參數視爲單個字符串
  • $?: 代表上一個命令執行是否成功的標誌,如果執行成功則$? 爲0, 否則不爲0
  • $#: 獲取當前shell命令行中參數的總個數
  • $_: 代表上一個命令的最後一個參數
  • $$: 代表所在命令的PID
  • $!: 代表最後執行的後臺命令的PID

日誌輸出

shell腳本開發中, 輸出的語句儘量不出現在標準輸出, 除非是少數的步驟提示性語句, 如果是出錯信息, 應存入到自己定義的出錯日誌中, 以便後期維護和調試, 其它不關心的信息直接輸出到/dev/null中. 否則輸出信息過多, 容易耗盡緩存, 造成腳本運行卡死, 難以調試定位.

  • date: 顯示日期時間的命令, 可通過此命令來作爲日誌的前綴, 方便定位. 一般形式爲 “[ date +%Y%m%d-%H%M%S` ]”
  • &[n]: 代表已經存在的文件描述符, &1代表輸出, &2代表錯誤輸出, &-代表關閉與它綁定的描述符, 如2>&1 錯誤輸出綁定到標準輸出, 2>&- 等價於2>/dev/null

條件判斷

使用[ ]判斷

注意事項

[ $HOME == $MALL ]

  • [ ]中每個組件都需要空格鍵來分格, 其中的變量最好都以雙引號括起來, 常量最好都以單或雙括起來
  • [ ]中\==和’=’結果都完全一樣, 習慣上可儘量使用==
常用參數

數值比較
- -ne: 比較兩個參數是否不相等
- -lt 參數1是否小於參數2
- -le 參數1是否小於等於參數2
- -gt 參數1是否大於參數2
- -ge 參數1是否大於等於參數2
- -n:判斷變量是否有值

文件比較
- -f 檢查某文件是否存在
- -d 檢查目錄是否存在
- -x:判斷是否存在並有可執行權限
- -d: 文件爲目錄爲真
- -c: 文件爲字符特殊文件爲真
- -b: 文件爲塊特殊文件爲真
- -s: 文件大小非0時爲真
- -t: 當文件描述符(默認爲1)指定的設備爲終端時爲真

權限比較
- -r: 用戶可讀爲真
- -w: 用戶可寫爲真
- -x: 用戶可執行爲真

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章