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