BASH初學者指南 - 輸入參數

歡迎閱讀BASH系列入門指南的第二部分,這是唯一的,它是初學者為初學者編寫的唯一BASH教程。

本指南的讀者將在建立自己的知識基礎上積累知識,並希望最終能夠寫出一些相當聰明的腳本。

上週我介紹了創建你的第一個腳本 ,其中只顯示了“Hello World”。 它涵蓋了諸如文本編輯器,如何打開終端窗口,放置腳本的位置,如何顯示單詞“Hello World”以及引號(“”)等轉義字符上的一些細節。

本週我將介紹輸入參數。 還有其他的指導教導這類事情,但我發現他們跳入一些相當低水平的東西,可能提供了太多的信息。

什麼是參數?

在上一篇教程的“Hello World”腳本中,它們都是非常靜態的。 這個劇本並沒有真正做得太多。

我們如何改進“Hello World”腳本?

怎麼樣的腳本來迎接運行它的人? 它不會說“Hello World”,而會說“Hello Gary”,“Hello Tim”或“Hello Dolly”。

如果沒有接受輸入參數的能力,我們需要編寫三個腳本“hellogary.sh”,“hellotim.sh”和“hellodolly.sh”。

通過允許我們的腳本讀取輸入參數,我們可以使用一個腳本來迎接任何人。

要做到這一點,打開一個終端窗口(CTRL + ALT + T)並通過鍵入以下命令導航到腳本文件夾:( 關於cd命令

CD腳本

輸入以下內容創建一個名為greetme.sh的新腳本:( 關於touch命令

觸摸greetme.sh

通過鍵入以下命令打開您最喜愛的編輯器中的腳本:( 關於nano命令

nano greetme.sh

在nano中輸入以下文本:

#!/ bin / bash echo“hello $ @”

按CTRL和O保存文件,然後按CTRL和X關閉文件。

要運行該腳本,請在命令行中輸入以下內容替換您的名稱。

sh greetme.sh

如果我用我的名字運行腳本,它會顯示“Hello Gary”這個詞。

第一行有#!/ bin / bash行,用於將文件標識為bash腳本。

第二行使用echo語句回顯單詞hello,然後出現奇怪的$ @符號。 ( 關於回顯命令

$ @展開以顯示與腳本名稱一起輸入的每個參數。 因此,如果您輸入“sh greetme.sh tim”,則會顯示“hello tim”字樣。 如果您輸入“greetme.sh tim smith”,則會顯示“hello tim smith”。

greetme.sh腳本只使用第一個名字就可以了。 當他們見面時,沒有人會說“你好,加里·紐維爾”,但他們可能會說“你好加里”。

讓我們改變腳本,以便它只使用第一個參數。 通過輸入以下命令打開nano中的greetme.sh腳本:

nano greetme.sh

更改腳本,使其如下所示:

#!/ bin / bash echo“hello $ 1”

按CTRL和O保存腳本,然後按CTRL和X退出。

如下所示運行腳本(用我的名字替換我的名字):

sh greetme.sh加里·紐維爾

當你運行這個腳本時,它會簡單地說出“你好加里”(或者希望是“你好”,不管你的名字是什麼。

$符號後面的1基本上對echo命令說,使用第一個參數。 如果你用$ 2替換$ 1,那麼它會顯示“hello newell”(或者你的姓氏是什麼)。

順便說一句,如果您用$ 3替換了$ 2,並且僅用2個參數運行腳本,則輸出將僅為“Hello”。

可以顯示和處理實際輸入的參數數量,在稍後的教程中,我將介紹如何使用參數計數進行驗證。

要顯示輸入的參數數目,請打開greetme.sh腳本(nano greetme.sh)並修改文本,如下所示:

#!/ bin / bash echo“你輸入了$#名稱”echo“hello $ @”

按下CTRL和O保存腳本,按CTRL和X退出nano。

第二行的$#顯示輸入的參數數量。

迄今為止,所有這些都是新穎的,但並不是非常有用。 誰需要一個簡單顯示“你好”的腳本?

echo語句的實際用法是為用戶提供詳細且有意義的輸出。 如果你可以想像你想做一些複雜的事情,包括一些嚴重的數字處理和文件/文件夾操作,向用戶展示每一步發生的事情將是有用的。

相比之下,輸入參數使腳本具有交互性。 如果沒有輸入參數,你需要幾十個腳本,所有的腳本都做了非常相似的事情,但名稱略有不同。

考慮到所有這些,還有其他一些有用的輸入參數,這是一個好主意,我會將它們全部包含在一個代碼片段中。

打開你的greetme.sh腳本並修改它,如下所示:

#!/ bin / bash echo“文件名:$ 0”echo“進程ID:$$”echo“---------------------------- ---“echo”你輸入了$#名稱“echo”hello $ @“

按下CTRL和O保存文件,並按下CTRL和X退出。

現在運行腳本(用你的名字替換)。

sh greetme.sh

這次腳本顯示以下內容:

文件名:greetme.sh進程ID:18595 ------------------------------你輸入了2個名字hello gary newell

腳本第一行的$ 0顯示您正在運行的腳本的名稱。 請注意,它是美元零而不是美元o。

第二行的$$顯示您正在運行的腳本的進程ID。 為什麼這很有用? 如果您在前台運行腳本,您可以通過簡單地按下CTRL和C來取消它。如果您在後台運行腳本,並且它開始循環並反复執行相同的操作,或者開始導致系統損壞,您需要殺了它。

要殺死在後台運行的腳本,您需要腳本的進程ID。 腳本是否將進程ID作為其輸出的一部分,這不是一件好事嗎? ( 關於ps和kill命令

最後,在結束這個話題之前,我想討論一下輸出的位置。 每次腳本運行到目前為止輸出都顯示在屏幕上。

腳本輸出寫入輸出文件是很常見的。 要做到這一點,運行你的腳本如下:

sh greetme.sh gary> greetme.log

上述命令中的>符號將文本“hello gary”輸出到名為greetme.log的文件中。

每次使用>符號運行腳本時,它都會覆蓋輸出文件的內容。 如果您希望附加到文件,請使用>>替換>。

概要

您現在應該可以將文本寫入屏幕並接受輸入參數。