Shell指令碼格式及執行方式詳解

2020-07-16 10:04:30
做什麼事情都會有第一次,我們學習語言的第一次就是寫著名的"Hello world!"程式。命令如下:

[[email protected] ~]# mkdir sh
[[email protected] ~]# cd sh
#建立Shell練習目錄
[[email protected] sh]#vi hello.sh
#The first program
#!/bin/bash
echo -e "c.biancheng.net"

大家發現了嗎?在 Shell 指令碼中是可以直接使用 echo 命令的。其實不止 echo 命令,所有的 Linux 命令都可以直接在 Shell 指令碼中呼叫。這種特性使得 Shell 指令碼和 Linux 系統結合得更加緊密,也更加方便了 Shell 指令碼的編寫。

下面給大家解釋一下這個指令碼的結構。

Shell的基本結構

第一行"#!/bin/bash"

在 Linux 中,以"#"開頭的一般都是注釋,不過這句話是例外的。這句話的作用是標稱我以下寫的指令碼使用的是 Bash 語法,只要寫的是基於 Bash 的 Shell 指令碼都應該這樣開頭。這就像在 HTML 語言中嵌入 PHP 程式時,PHP 程式必須用<??>包含起來。

不過,有一些比較喜歡鑽研的人也會有疑問,他們在寫 Shell 指令碼時,不加"#!/bin/bash"這句話,Shell 指令碼也可以正確執行。那是因為我們是在預設 Shell 就是 Bash 的 Linux 中編寫的指令碼,而且指令碼是純 Bash 指令碼才能夠正確執行。如果把指令碼放在預設環境不是 Bash 的環境中執行,又或者編寫指令碼的不是純 Bash 語言,而是嵌入了其他語言(如 Tcl 語言),那麼這個指令碼就不能 正確執行了。所以,大家記住我們的 Shell 指令碼都必須以"#!/bin/bash"開頭。

第二行:注釋

在 Shell 指令碼中,除"#!/bin/bash"這行外,其他行只要以"#"開頭的都是注釋。第二行就是我們這個指令碼的註釋,建議大家在寫程式時加入清晰而詳盡的註釋,這些都是建立良好程式設計規範時應該注意的問題。

第三行:程式的主體

既然 echo 命令可以直接列印"c.biancheng.net",那麼將這句話放入 Shell 指令碼中也是可以正確執行的,因為 Linux 的命令是可以直接在指令碼中執行的。

執行方式

Shell 指令碼寫好了,那麼這個指令碼該如何執行呢?在 Linux 中,指令碼的執行主要有以下兩種方法:

賦予執行許可權,直接執行

這種方法是最常用的 Shell 指令碼執行方法,也最為直接簡單。就是賦予執行許可權之後,直接執行。當然,執行時可以使用絕對路徑,也可以使用相對路徑。命令如下:

[[email protected] sh]# chmod 755 hello.sh
#賦予執行許可權
[[email protected] sh]# /root/sh/hello.sh
c.biancheng.net
#使用絕對路徑執行
[[email protected] sh]#./hello.sh
c.biancheng.net
#因為我們已經在/root/sh目錄中,所以也可以使用相對路徑執行

Shell 指令碼是否可以像 Linux 系統命令一樣,不用指定路徑,直接執行呢?當然是可以的,不過需要進行環境變數的設定。這裡大家只需要知道,我們自己寫的 Shell 指令碼預設是不能執行的,要麼使用絕對路徑,要麼使用相對路徑。

通過Bash呼叫執行指令碼

這種方法也非常簡單,命令如下:

[[email protected] sh]# bash hello.sh
c.biancheng.net

這種方法的意思是直接使用 Bash 去解釋指令碼中的內容,所以這個指令碼也可以正常執行。使用這種方法執行指令碼,甚至不需要指令碼檔案有"執行"許可權,只要擁有"讀"許可權就可以執行了。

這兩種 Shell 指令碼的執行方式,大家可以按照個人習慣隨意使用。