Bash 初學者系列 1:創建并運行第一個 bash shell 腳本
我們可能經常會在 Linux 服務器上做一些重復的工作,比如文件的備份,清理臨時文件,或者數據庫的備份與恢復等。
對于這些重復性的工作,將其自動化是一個常規的操作,而自動化任務是 bash 腳本功能的應用場景之一。
今天我們將會介紹如何創建一個簡單的 bash shell 腳本,如何運行 bash 腳本,以及關于 shell 腳本必須了解的內容。
創建并運行第一個 shell 腳本
我們先創建一個名為 scripts 的目錄,用于存放所有的 bash 腳本。
然后在 scripts 目錄中,使用 cat 命令創建一個名為 hello.sh 的文件:
在 hello.sh 文件中編輯如下內容:
按 Ctrl + D 命令保存文件,然后退出 cat 命令。
也可以使用其他文本編輯器,比如 vim,emacs 或者 nano;如果你用的桌面 Linux,也可以使用像 Gedit 這樣的圖形文本編輯器將文本添加到文件中。
我們添加到 hello.sh 中的腳本是使用 echo 命令打印 “Hello World”,你也可以直接在終端中使用此命令,不過在我們的測試中,是通過 shell 腳本運行此命令。
然后我們使用 chmod 命令給 hello.sh 文件添加可執行權限,如下所示:
然后運行該腳本文件,如下:
你會看到 Hello World 打印在屏幕上。這跟我們學習其他編程語言一樣,第一個程序總是打印 Hello World。
將shell腳本轉換為bash腳本
將 shell 腳本轉為 bash 腳本,這看起來比較難理解是吧?我們簡單的解釋一下。
Bash是“Bourne-Again shell”的縮寫,它只是 Linux 中許多可用 shell 中的一種。
而 shell 是一個接受和運行命令的命令行解釋器。如果你運行過 Linux 命令,那么也就使用過 shell。當你在 Linux 中打開終端時,就已經在運行系統的默認 shell。
bash 通常是大多數 Linux 系統的默認 shell,所以很多時候,bash 都與 shell 同義。
shell 腳本的語法幾乎是相同的,但也有不同的地方。比如,在 zsh 中,數組的索引是從1開始的,而 bash 是從0開始的。如果腳本中存在數組,那么使用zsh 編寫的 shell 腳本,與 bash 編寫的腳本就不同了。
為了避免這種差異造成的運行異常,我們應該告訴解釋器當前腳本是使用哪種 shell 編寫的,這個時候,需要使用 shebang!
shell 腳本開頭的 shebang 行
在 shell 腳本的第一行,即 #! /bin/bash 這一行通常被稱為 shebang,這是因為它是以兩個字符開頭的,分別是 #(hash)和 !(bang)。
當我們在腳本的頂部包含 #! /bin/bash 時,系統就知道我們希望使用 bash 作為腳本的解釋器。因此可以直接運行 hello.sh,而無需在其前面加上 bash。
將shell腳本添加到PATH(以便可以從任何目錄運行)
在前面我們運行 hello.sh 的時候,在前面添加了./ 字符,如果省略了這兩個字符,就會出錯:
首先 Bash 認為我們正在嘗試運行一個名為hello.sh的命令,當我們在終端上運行任何命令時,shell 會在PATH變量中存儲的一組目錄中查找該命令。
可以使用 echo 命令查看 PATH 變量的內容:
在 PATH 變量中,各個目錄的路徑之間使用冒號 :分割開。
像 echo、cat 等 Linux 命令可以從任何地方運行,因為它們的可執行文件存儲在 bin 目錄中,而 bin 目錄包含在 PATH 中。當我們運行命令時,系統會檢查 PATH 中所有可能的位置,以查找該命令的可執行文件。
如果想要讓我們的 bash 腳本從任何地方都可以運行,那么需要將該腳本的位置添加到 PATH 變量中。
首先,使用 pwd 命令查看當前目錄的位置(bash 腳本的位置):
然后使用export命令將腳本目錄添加到 PATH 變量中:
現在我們再來運行一下 hello.sh:
可以看到,添加到 PATH 變量后,腳本可以正常運行了。