Bash Shell 腳本新手指南(一)
如標題所示,本文將涵蓋面向初學者的 Bash Shell 腳本知識。雖然本文沒有回顧 Bash 的歷史,但是有很多資源能夠便于讀者了解相關內容,讀者也可以直接訪問 https://www.gnu.org/software/bash/ 上的 GNU 項目。我們會從了解一些非常基本的概念開始,然后再將相關知識綜合起來。
創建腳本文件
首先來創建一個腳本文件。我們要確保當前目錄為家目錄。
- cd ~
在主目錄中創建示例文件。文件名可以是任意名稱,本文使用 learnToScript.sh 作為文件名。
- touch learnToScript.sh
此時家目錄中就生成了一個名為 learnToScript.sh 的文件。輸入以下命令以檢驗該文件是否存在,還可以注意到其權限是 -rw-rw-r–。
- [zexcon@trinity ~]$ ls -l
- total 7
- drwxr-xr-x. 1 zexcon zexcon 90 Aug 30 13:08 Desktop
- drwxr-xr-x. 1 zexcon zexcon 80 Sep 16 08:53 Documents
- drwxr-xr-x. 1 zexcon zexcon 1222 Sep 16 08:53 Downloads
- -rw-rw-r--. 1 zexcon zexcon 70 Sep 17 10:10 learnToScript.sh
- drwxr-xr-x. 1 zexcon zexcon 0 Jul 7 16:04 Music
- drwxr-xr-x. 1 zexcon zexcon 318 Sep 15 13:53 Pictures
- drwxr-xr-x. 1 zexcon zexcon 0 Jul 7 16:04 Public
- drwxr-xr-x. 1 zexcon zexcon 0 Jul 7 16:04 Videos
- [zexcon@trinity ~]$
正式開始之前還有一件事要做。可以試一下在沒有寫入任何內容的情況下執行腳本,命令行輸入以下內容:
- ./learnToScript.sh
- [zexcon ~]$ ./learnToScript.sh
- bash: ./learnToScript.sh: Permission denied
提示權限被拒絕,因為該文件沒有執行權限。所以你需要更改文件的權限才能執行腳本。
假定我們已經了解了權限相關知識,回到終端更改 learnToScript.sh 文件,增加執行權限。輸入以下內容:
- chmod 755 learnToScript.sh
- [zexcon@trinity ~]$ ls -l
- total 7
- drwxr-xr-x. 1 zexcon zexcon 90 Aug 30 13:08 Desktop
- drwxr-xr-x. 1 zexcon zexcon 80 Sep 16 08:53 Documents
- drwxr-xr-x. 1 zexcon zexcon 1222 Sep 16 08:53 Downloads
- -rwxr-xr-x. 1 zexcon zexcon 70 Sep 17 10:10 learnToScript.sh
- drwxr-xr-x. 1 zexcon zexcon 0 Jul 7 16:04 Music
- drwxr-xr-x. 1 zexcon zexcon 318 Sep 15 13:53 Pictures
- drwxr-xr-x. 1 zexcon zexcon 0 Jul 7 16:04 Public
- drwxr-xr-x. 1 zexcon zexcon 0 Jul 7 16:04 Videos
- [zexcon@trinity ~]$
好的,現在一切準備就緒,你已經獲得了 learnToScript.sh 命令的讀取、寫入和執行權限 (-rwxr-xr-x)。
編輯腳本文件
下面的內容需要你熟悉 vim 或其他類似的文本編輯器,本文選用 vim。在命令提示符下輸入以下內容:
- vim learnToScript.sh
這會打開一個空的文本文件,里面有一堆波浪號。鍵盤輸入 i 將進入插入模式。通過查看終端窗口的左下角,你可以確認它處于該模式。(友情推薦,nano 編輯器也很不錯。)
接下來我們要確保文件被正確的解釋器識別。因此,輸入 #! 和 bash 的目錄 /bin/bash:
- #!/bin/bash
本文教程步驟的最后一件事是保存文檔。按 Esc 退出輸入模式,然后按 Shift+:。在冒號處輸入 wq,按下回車鍵,就會寫入(w)文件并退出(q)vim 編輯器。
使用 vim 時要記住,要想寫入文檔,就需要輸入 i,此時你會在底部看到 –INSERT–。要保存文檔,就需要按 Esc 退出輸入模式,然后按 Shift+:,輸入 w 寫入文件;或者按 Esc,然后 Shift+: 輸入 q,實現退出而不保存;或者將 wq 連在一起,可以實現寫入并關閉文件。Esc 本身就只是退出插入模式。你可以在其 官方網站 或 教程網站 上找到更多關于 vim 的信息。
開始正式寫腳本
echo 命令
echo 命令用于向終端返回一些信息,可以使用單引號、雙引號或不使用引號。那么讓我們用一個傳統的 Hello World 來試試它!
- #!/bin/bash
- echo Hello World!
- echo 'Hello World!'
- echo "Hello World!"
- [zexcon ~]$ ./learnToScript.sh
- Hello World!
- Hello World!
- Hello World!
- [zexcon ~]$
注意,上述三行得到了相同的結果。使用單引號、雙引號或不使用引號的結果不是一定相同的,但在這個基本腳本中確實得到了同樣的結果。在某些情況下,引號的類型不同會導致結果差異。至此恭喜你編寫了第一個 Bash 腳本。當你繼續創建更多腳本并放飛你的想法時,可能會需要了解以下更多的知識。
命令替換 $( ) 和 ` `
命令替換可以實現以下效果:獲取在命令行執行命令的結果,并將該結果寫入變量。例如,如果在命令提示符下輸入 ls,可以獲得當前工作目錄的列表。我們用這個命令來實踐一下。命令替換選項有兩個,請注意:第一個選項使用鍵盤左側 Tab 鍵上方的反引號。它與波浪號 ~ 在一個鍵位上。第二個選項使用 shell 變量。
- #!/bin/bash
- command1=`ls`
- echo $command1
- command2=$(ls)
- echo $command2
- [zexcon ~]$ ./learnToScript.sh
- Desktop Documents Downloads learnToScript.sh Music Pictures Public snap Videos
- Desktop Documents Downloads learnToScript.sh Music Pictures Public snap Videos
- [zexcon ~]$
注意變量、等號和命令開頭之間不要有空格。使用這兩個選項得到的結果是完全相同的。請注意,變量需要以美元符號開頭。如果你忘記了,并且回顯了不帶美元符號的命令變量,會只輸出命令的名稱,如下所示:
- #!/bin/bash
- command1=`ls`
- echo command1
- command2=$(ls)
- echo command2
- [zexcon ~]$ ./learnToScript.sh
- command1
- command2
- [zexcon ~]$
雙括號 (())
那么雙括號有什么用呢? 很簡單,雙括號用于數學方程式。
- #!/bin/bash
- echo $((5+3))
- echo $((5-3))
- echo $((5*3))
- echo $((5/3))
- [zexcon ~]$ ./learnToScript.sh
- 8
- 2
- 15
- 1
- [zexcon ~]$
結語
至此,我們已經創建了第一個腳本。我們知道了如何執行多個命令:將它們放在一個腳本中并運行,就可以獲得結果。下一篇文章會繼續討論,了解輸入和輸出的重定向、管道命令、使用雙括號或者添加注釋等知識。