Shell 基礎 1-宣告, 變數, 函數, 確認檔案存在
因為寫了一篇介紹如何使用 shell script 來備份伺服器資料的小程式,發現如果連相關的基礎使用也放進去的話會導致篇幅過長,所以我另外寫一篇文章介紹這些基礎用法。
建議在編寫 Shell script 時,可以加上『.sh』副檔名方便識別。
為了要讓系統知道這個檔案是 shell script,必須要在檔案的第一行寫入下列這行指令。
看起來很像註解,但這就是規定。
至於你可以看到這段指令中有個路徑『/bin/bash』,意思是接下來的指令希望以 bash 環境執行。事實上,Linux 有許多不同種 shell 環境可以用來作為特定用途,不過通常一般來說最常見的就是使用 bash 來執行命令。其他種 shell 就屬於進階用法,我自己也不是很熟悉,以後有機會碰到再來介紹吧。 🙂
1 |
#!/bin/bash |
變數宣告很像 Python 不需在最前方加上什麼關鍵字。宣告後,便可以使用 dollar sign 『$』來使用變數。
Shell 預設使用全域變數,所以在函數中宣告變數要特別小心,盡可能將函數內使用的變數使用區域變數來宣告。
切記,等號兩端不能加上空白鍵!
1 2 |
MyName='Jerry' echo $MyName |
1 |
Jerry |
區域變數:local 變數名稱
更深入的使用方法在『函數』的部分做講解。
1 |
local Name='Michael' |
變數命名含有底線的話,在使用此變數的時候必須要加上『{ }』,如下所示:
若不加上大括號執行程式,應該因為模糊不明會造成而出錯。
1 2 |
MY_NAME='ABC' echo "${MY_NAME}_IS_MY_NAME." |
1 |
ABC_IS_MY_NAME. |
宣告函數與呼叫函數
1 2 3 4 5 6 7 |
## 宣告函數 function CallName(){ ## 函數內容 } ## 呼叫函數 CallName |
測試一下
1 2 3 4 5 6 7 8 9 |
#!/bin/bash MyName='Jerry' function CallName(){ echo $MyName } CallName |
1 |
Jerry |
設計可以傳入參數的函數,參數依序以$1~$n表示。
這裡面特別使用了區域變數“local”來宣告在函數內的 Name 變數,原因就是為了要避免在函數內呼叫或修改全域變數。
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash function CallName(){ local Name=$1 echo "Hello, $Name." return 1 } CallName 'Eric' CallName 'Jerry' |
1 2 |
Hello, Eric. Hello, Jerry. |
檢查檔案或路徑是否存在,這邊要注意 Shell 的 if 語法中括號內側各需要 1 個空白字元隔開。
1 2 3 4 5 6 |
if [ -f "/var/www/abc" ] then echo "Exists." else echo "Can't find the file or path." fi |
Pingback:Shell 基礎 2-判斷指令執行成功 - BrilliantCode.net