接下來的幾篇要來介紹 Shell Script 這個東西,今天會稍微做個簡介,明天之後開始會介紹 Bash 相關的語法,然後實作一些有趣的腳本,相信對伺服器管理或是日常工作都會有幫助。
如果大家有接觸 Linux ,應該會發現很多人傾向使用終端機完成各種任務,比使用 GUI 操作的人效率高上非常多,因爲終端機這個應用程式讓使用者執行指令之後,Shell 負責把這些指令翻譯成核心(Kernel) 聽得懂的話,就可以控制作業系統了。
Shell 的家族有非常多種版本,比較常見的像是 sh
,bash
,dash
以及zsh
,以下一一介紹。
Bourne shell(sh
) 是由 Stephen Bourne 開發的原生 UNIX 腳本,預設路徑爲 /bin/sh
Bourne Agan shell,由 Brian Fox 開發,bash
新增了很多額外的擴充功能,因此在 GNU/Linux 的作業系統就把 /bin/sh
改爲連接到 bash ,而在基於 Debian 的作業系統以及 Ubuntu 則把預設路徑設爲/bin/bash
,原因會在以下說明。
基於 Debian 的作業系統還有 Ubuntu 16.04之後的版本爲了避免預設的 sh 過於肥大,因此把 /bin/sh
的檔案路徑連接到更輕量且符合 POSIX 標準的 Debian Almquist Shell(dash)。
zsh
除了繼承了 bash
原本的功能之外,也集各家 Shell 特性之大成,重點是 zsh
支援了非常多的框架,其中最著名的叫做 Oh My Zsh。
如果把這些命令 Kernel 做事的指令寫成一個檔案,就叫做 Shell Script,因此和前面講的概念一樣,執行 Shell Script,Shell 負責翻譯並和 Kernel 溝通。
寫成 Shell Script 的話能夠帶來一些好處:
管理伺服器時常常會有一些固定的指令,像是固定要從伺服器上面備份資料,每次執行的資料都一樣,而有時後你也有可能忘記備份,因此把它寫成腳本並定時排程執行,將會減少很多時間成本。
有時後開發專案建立一個環境,要執行許多固定的指令,有了腳本就不用每到一個新環境就輸入一次,自動讓他跑完環境就建完了。
幾乎所有 Unix-like 的作業系統都可以執行腳本,如果是使用 Python, Ruby, JavaScript 等程式語言所寫的腳本,在很多環境下都必須自己安裝相關的環境,而 Shell Script 只要寫完就可以執行了,因此易用性增加不少。
https://sunlightmedia.org/bash-vs-zsh/
http://www.happycxz.com/m/?p=137
http://linux.vbird.org/linux_basic/0340bashshell-scripts.php#script_why
https://askubuntu.com/questions/172481/is-bash-scripting-the-same-as-shell-scripting