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
提示許可權被拒絕,因為該文件沒有執行許可權。所以你需要更改文件的許可權才能執行腳本。如果你不熟悉許可權相關知識,建議閱讀 Paul W. Frields 寫的 Fedora 雜誌文章。
假定我們已經了解了許可權相關知識,回到終端更改 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 ~]$
結語
至此,我們已經創建了第一個腳本。我們知道了如何執行多個命令:將它們放在一個腳本中並運行,就可以獲得結果。下一篇文章會繼續討論,了解輸入和輸出的重定向、管道命令、使用雙括弧或者添加註釋等知識。
via: https://fedoramagazine.org/bash-shell-scripting-for-beginners-part-1/
作者:zexcon 選題:lujun9972 譯者:unigeorge 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive