您已經學習瞭如何建立指令碼、使用引數和構建for迴圈。現在,讓我們看一些更基本的命令,文字檔案操作,以及將輸入和輸出重定向到檔案和其他命令。
我們已經為您提供了shell指令碼的基本分類和for迴圈的基於示例的概要,但是如果您錯過了我們的shell指令碼指南,請務必檢視這些文章。
命令列之所以出色有很多原因,重定向是最突出的原因之一。如果為了採取進一步的行動或將其用於其他事情而必須記錄並再現每個命令的輸出,那麼我們早就瘋了。重定向允許我們使用該輸出並儲存它,或者立即將其用作另一個命令的輸入。我們也可以使用檔案作為其他命令的輸入。
在繼續之前,讓我們先介紹一些基本命令,這些命令可以在許多不同的地方使用。
echo–這個命令只是在命令列上列印(顯示)整個引數作為輸出
echo argument with spaces
如您所見,特殊字元需要“轉義”,以便正常處理。這是透過在字元前面使用反斜槓(\)來完成的。最好用引號。echo命令也適用於變數。
如您所見,單引號和雙引號的行為不同。有關更多資訊,請檢視bashshell中單引號和雙引號的區別?
cat–此命令將文字檔案的內容顯示為輸出。
cat file_to_be_read
假設我們在nano中建立這個文字檔案:
當我們對檔案使用cat命令時,我們可以看到它的輸出。
grep–這是Linux中最強大、最有用的命令之一。它代表全域性/正則表示式列印。它瀏覽一個檔案並列印與特定模式匹配的任何行。因為這個模式是基於“正則表示式”的,所以一條簡潔的行可以產生大量要匹配的模式。不過,對於not,您可以輸入一個tern進行搜尋。
grep pattern file
我向你保證,格雷普可以做得更多,但現在讓我們繼續做更簡單的事情。
為了將命令的輸出重定向到檔案,我們使用了一個特殊字元,即大於符號(>)。
我們把單子改一下,好嗎?輸入以下命令:
echo pepperoni > list
您可以看到echo不再顯示該行,當我們檢視“list”檔案的內容時,我們可以看到其中的回聲。
還要注意的是,“列表”之前的內容已被刪除。再試一次:
當您想重用一個檔案時,這會很有用,但通常我們只想新增到現有的檔案中。為此,我們使用兩個連續的大於符號:
echo yellow peppers >> list
容易的!讓我們用這個命令建立一個更大的列表,好嗎?
就這樣。我想你可以理解為什麼這麼多極客使用命令列來**待辦事項列表之類的東西,但是它變得更好了。
讓我們將命令的輸出放入一個檔案中:
ls –al / > ~/rootlist
**檔案列表,編輯它們,然後在你想要的檔案上執行命令,從來沒有這麼簡單過。而且,當我們在命令列中執行這些基本功能時,它們在指令碼中也能很好地工作。
管道之所以這樣命名,是因為它使用管道(在大多數鍵盤上與\鍵共享)。從本質上講,它接受一個命令的輸出並直接將其提供給另一個命令。您可以透過這種方式建立長的命令鏈來獲得非常特定的所需輸出,這對於grep之類的命令非常方便。
它的行為很像“>”,只是它可以被連結多次,其效果更一般,因為它不需要遍歷文字檔案。
如你所見,grep是區分大小寫的。可以使用“-i”標誌使其忽略大小寫。
還可以使用小於符號(<)從檔案中獲取命令的輸入。
cat < list
“這和用論點沒什麼區別!“你可能會說。在這種情況下你是對的。輸入重定向真正有用的地方是將命令連結在一起。
假設我們想從當前的“list”檔案中將任何包含“pep”的單詞過濾到一個名為“revisi***”的新檔案中。
grep pep < list > revisi***
讓我們重做這個命令,並新增一些排序。
grep pep < list | sort > revisi***
這將使用“pep”作為輸入檔案“list”中的搜尋項,按字母順序對其排序(所有大寫項後跟所有小寫項),然後將其輸出到“revisi***”檔案中。
為了演示sort命令,讓我們看一下以下示例:
如您所見,向sort命令新增“-f”標誌允許您忽略大小寫。這使得我們可以很容易地按字母順序排列文字檔案中的行,並忽略大小寫時,這並不重要。
讓我們建立一個具有以下形式的指令碼:
script searchterm listfile
It will take the term and use grep to search through a list file, sort the results, and then output them to another file.
下面是我們將在其中測試指令碼的目錄:
我們可以在這裡建立一個列表,然後執行指令碼。
給你!學習正則表示式的規則越多,就越能準確地組合搜尋命令。而且,任何在引號中有效的東西都可以代替你的第一個引數!
就排序而言,您可以做的不僅僅是按字母順序排序。檢視手冊頁,瞭解以下命令:
今天我們看了一些在命令列和指令碼中同樣有用的基礎知識。基於文字的資料通常是我們日常使用的核心,因此能夠處理、搜尋和操作它是關鍵。
你最喜歡的指令碼是什麼?對於基於文字的檔案,有什麼特殊的使用指令碼嗎?分享你在評論中所知道的!
...s課程。如果您是一名開發人員和devops工程師,對學習Linux指令碼的細微差別相當感興趣,那麼本課程將是對您的技能的一個很好的補充。 ...
...Chin的refcard深入研究了Java程式設計。儘管如此,它仍然是初學者友好的。這個refcard涵蓋了從設定到Java程式設計以及測試I/O庫的所有內容。因此,帶有Java和Raspberry Pi refcard的DZone IoT應用程式提供了全面的軟體和硬體概述。DZone的Io...
... 此外,還有一個Bash指令碼部分,它解釋了可以在命令列中進行的基本程式設計。這包括變數、if語句、迴圈和函式。如果你不熟悉這些,不用擔心——它們相當簡單! ...
...一個匆忙衝出Windows版本的埠。程式碼對於簡單的自動化指令碼來說是很好的,但是外掛支援才是它真正的亮點。 ...
...如何透過簡單的使用者介面開啟和關閉**上的LED。提供了指令碼,因此您不需要在複雜的編碼過程中絆倒。透過檢視這些指令碼,您將學到很多關於如何為Pi設定基於web的應用程式的知識。 ...
...們將一起建立一個簡短的Python,不過如果您想獲取完成的指令碼,可以從Pastebin複製程式碼。 ...
Python是當今世界上最流行的程式語言之一。雖然大多數人可能把它的流行歸因於它在資料科學和機器學習等領域的應用,但它也很容易學習語法,因此深受初學者的喜愛。 ...