bash腳本格式
『壹』 不過時的技術——Bash腳本
Bash是一種不需要編譯,直接運行在Unix/Linux系統之上的腳本程序。它可以只包含一些簡單的命令,順序執行;也可以包含變數、控制語句等復雜的語法結構。Unix/Linux系統一直就是計算機世界的基石,Bash也是系統管理員、程序員必須掌握的技術之一,很多工作都可以藉助Bash自動執行。甚至Unix/Linux系統本身的很多功能,也是由Bash實現的。隨意打開 /etc/init.d/ 目錄下的某個文件,會發現就是一個Bash腳本,在Linux中,存在這大量這樣的腳本。
上面的腳本看似復雜,但從結構上可以簡單劃分為四部分:
1. 第一行 #! /bin/sh 叫 shebang ,標明這是一個Shell腳本。
2. 後面以 # 打頭的是注釋,說明該腳本的作用及用法。
3. 中間一大段是命令及控制語句,這里是真正做事的地方。
4. 最後 exit 0 ,退出腳本。
一個Linux命令執行後,都會有一個返回值, 0 表示命令執行成功, 1 表示命令執行過程中出錯,根據錯誤的不同,還可能返回 2 、 3 、 4 等值。在Linux中,變數 $? 記錄了上次命令的返回值。使用 echo $? 可以查看上次命令執行成功與否。Bash腳本的返回值默認為最後一條命令的返回值,很多時候這並不是我們想要的結果,因此常常在腳本最後使用 exit 0 顯式聲明返回值。
遵循上面的規則,我們可以編寫出自己的第一個Bash腳本: hello_world ,它的作用是在命令行列印一條消息。
切換到該腳本所在目錄, bash hello_world 運行該腳本,不出意外的話,恭喜你寫出了第一個Bash腳本。
通常人們不採用 bash hello_world 這種方式運行Bash腳本,而是賦給腳本可執行許可權,直接運行腳本:
有些同學會在運行腳本時碰到一個問題:既然已經在當前目錄下,為什麼直接運行 hello_world 會報命令找不到的錯誤?這是因為 當前目錄並不包含在$PATH 路徑下。Linux執行一個程序時,總是在系統環境變數$PATH里找對應的可執行程序,如果找不到,就會報命令找不到的錯誤。我們可以列印出$PATH變數 echo $PATH ,顯然,當前路徑並沒有包含在裡面。
為了方便,系統管理員通常把Bash腳本保存在 /usr/local/bin 和 $USER/bin 目錄下,因為這些目錄默認包含在系統環境變數$PATH里。我喜歡在當前用戶目錄下新建一個 bin 目錄,然後將該目錄加入$PATH,就可以直接在這里編寫Bash腳本了。
編寫Bash腳本時手一滑,可能會將腳本命名為 test ,此時執行腳本會得到意想不到的結果:
使用 which 和 type 命令檢查後發現,事實上執行了一條內置的Linux命令。此時就需要明確指定路徑來執行該腳本了: ./test 。最好是能在命名時注意沖突,隨著對Linux的熟悉,這種情況會慢慢好起來的。
最後為大家布置一道練習題:編寫一個Bash腳本,在當前目錄下生成一個日誌文件,隨意輸入一些內容,備份該文件,並將原始日誌文件內容清空。如果對Linux命令不熟悉,可能要查閱一些資料:如何輸出一些文本到文件、如何清空文件內容等。
讀者若對Bash腳本感興趣,可閱讀 Advanced Bash-Scripting Guide 深入學習,祝大家學習快樂!