《Shell 程式設計》01_Shell 指令碼初步入門
《Shell 程式設計》01_Shell 指令碼初步入門
標籤(空格分隔): Shell
文章目錄
1.1 什麼是 Shell
- Shell 是一個命令直譯器。它的作用是解釋執行使用者輸入的命令及程式等,使用者每輸入一條命令,Shell 就解釋執行一條。這種從鍵盤一輸入命令,就可以立即得到迴應的對話方式,稱為互動的方式。
1.2 什麼是 Shell 指令碼
- 當命令或程式語句不在命令列下執行,而是通過一個程式檔案來執行時,該程式就被稱為 Shell 指令碼。如果在 Shell 腳本里內建了很多條命令、語句及迴圈控制,然後將這些命令一次性執行完畢,這種通過檔案執行指令碼的方式稱為非互動的方式。
1.3 指令碼語言的種類
1.3.1 Shell 指令碼語言的種類
-
Shell 指令碼語言弱型別語言(無須定義變數的型別即可使用),在 Unix/Linux 中主要有兩大類 Shell:Bourne Shell 和 C Shell。
-
Shell
- Bourne Shell
- Bourne Shell(sh)
- Korn Shell(ksh)
- Bourne Again Shell(bash)
- C Shell
- csh
- tcsh
- Bourne Shell
1.3.2 其他常用的指令碼語言種類
- PHP 語言
- Perl 語言
- Python 語言
1.4 Shell 指令碼的建立和執行
1.4.1 Shell 指令碼的建立
1)指令碼開頭(第一行)
#!/bin/bash
-
其中,開頭的 “#!” 字元又稱為幻數,在執行 bash 指令碼的時候,核心會根據 “#!” 後的直譯器來確定該用哪個程式解釋這個指令碼中的內容。
-
這一行必須位於每個指令碼頂端的第一行,如果不是第一行則為指令碼的註釋行。
-
CentOS 和 Red Hat Linux 下預設的 Shell 均為 bash。因此,在寫 Shell 指令碼的時候,指令碼的開頭即使不加 “#!/bin/bash” ,它也會交給 bash 解釋。所以如果要指定直譯器,最好加上相應的開頭直譯器語言標識。
2)指令碼註釋
- # 後面的內容表示註釋。
1.4.2 Shell 指令碼的執行
-
當 Shell 指令碼執行時,它會先查詢系統環境變數 ENV,該變數指定了環境檔案,在載入了上述環境變數檔案後,Shell 就開始執行 Shell 指令碼中的內容。
-
Shell 指令碼是從上至下、從左至右依次執行每一行的命令和語句的。如果在 Shell 指令碼中遇到子指令碼(即指令碼巢狀)時,就會先執行子指令碼的內容,完成後再返回父指令碼繼續執行父指令碼內後續的命令和語句。
-
通常情況下,在執行 Shell 指令碼時,會像系統核心請求啟動一個新的程序,以便在該程序中執行指令碼的命令及子 Shell 指令碼。
-
Shell 指令碼的執行通常可以採用以下幾種方式:
1)bash script-name 或 sh script-name :當指令碼檔案本身沒有可執行許可權或指令碼檔案開頭沒有指定直譯器時需要使用的方法。
2)path/script-name 或 ./script-name :指令碼需要有可執行許可權,在絕對路徑或相對路徑直接執行指令碼。
3)source script-name 或 . script-name :讀入或載入指定的 Shell 指令碼檔案(如 son.sh),然後,依次執行指定的 Shell 指令碼檔案 son.sh 中的語句。這些語句將在當前父 Shell 指令碼 father.sh 程序中執行(其他幾種模式都會啟動新的程序執行子指令碼)。因此,使用 source 或 . 可以將 son.sh 自身指令碼中的變數值或函式等的返回值傳遞到當前父 Shell 指令碼中使用。
4)sh<script-name 或 cat script-name|sh :將所有字串拼接為命令的形式,然後經由管道交給 bash 操作。
1.5 Shell 指令碼開發的基本規範及習慣
規範:
1)Shell 指令碼的第一行是指定指令碼直譯器,通常為:
#!/bin/bash
2)Shell 指令碼的開頭會加版本、版權等資訊:
# Date: 22:00 2018-10-22
# Author: Created by ylt
# Blog: https: //blog.csdn.net/weixin_42061048
# Description: This scripts function is ...
# Version: 1.1
3)Shell 指令碼中儘量不使用中文。
4)Shell 指令碼的命名應以 .sh 為副檔名。
5)Shell 指令碼應存放在固定的路徑下。
書寫習慣:
1)成對的符號應一次性寫出來,然後退格在符號裡增加內容,以防止遺漏。這些成對的符號包括:
{} [] '' `` ""
2)中括號 [] ;兩端至少要有 1 個空格。
3)對於流程控制語句,應一次性將格式寫完,再新增內容。
4)通過縮排讓程式碼更易讀。
5)對於常規變數的字串定義變數值應加雙引號,並且等號前後不能有空格,需要強引用的(指所見即所得的字元引用)則用單引號,如果是命令的引用,則用反引號。
6)指令碼中的雙引號、單引號及反引號必須為英文狀態下的符號。