shell指令碼入門(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)檔案並退出(qvim編輯器。

使用 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

本文由 LCTT原創編譯,Linux中國榮譽推出