一、輸入重定向和輸出重定向
輸入重定向就是把檔案作為命令的引數,輸出重定向就是把原本要輸出到螢屏上的內容寫到檔案里面,

(1)輸入重定向:

(2)輸出重定向;

對于重定向中的標準輸出模式,可以省略檔案描述符1不寫,而錯誤輸出模式的檔案描述符2是必須要寫的,
示例:

重定向中的覆寫寫入和追加寫入的不同:
覆寫寫入就是清除原有資料,只保留最后一次的輸入;追加寫入就是保留原來的資料在后面添加后來的資料

雖然都是輸出重定向,但是標準輸出和錯誤輸出還是有區別的,如果檔案存在則輸出檔案內容,如果不存在則錯誤訊息會輸出到螢屏,
如何把創建檔案時的錯誤訊息也寫入呢?示例如下

還有一種常見情況,就是我們想不區分標準輸出和錯誤輸出,只要命令有輸出資訊則全部追加寫入到檔案中,這就要用到&>>運算子了:

二、管道符命令
其執行格式為“命令A | 命令B”,管道命令符的作用也可以用一句話概括為“把前一個命令原本要輸出到螢屏的資訊當作后一個命令的標準輸入”
在修改用戶密碼時,通常都需要輸入兩次密碼以進行確認,這在撰寫自動化腳本時將成為一個非常致命的缺陷,通過把管道符和passwd命令的--stdin
引數相結合,可以用一條命令來完成密碼重置操作:

如果需要將管道符處理后的結果既輸出到螢屏,又同時寫入到檔案中,則可以與tee命令結合使用,

命令通配符
顧名思義,通配符就是通用的匹配資訊的符號,比如星號(*)代表匹配零個或多個字符,問號(?)代表匹配單個字符,中括號內加上數字[0-9]代表匹配
0~9之間的單個數字的字符,而中括號內加上字母[abc]則是代表匹配a、b、c三個字符中的任意一個字符,

示例:
匹配所有在/dev目錄中且以loop開頭的檔案:

如果只想查看檔案名以ram開頭,但是后面還緊跟其他某一個字符的檔案的相關資訊,這時就需要用到問號來進行通配了

通配符不僅可用于搜索檔案或代替被通配的字符,還可以與創建檔案的命令相結合,一口氣創建出好多個檔案,不過在創建多個檔案時,需要使用大括號,
并且欄位之間用逗號間隔:

轉義字符
四個常見的轉義字符:

我們先定義一個名為number的變數并賦值為5,然后輸出以雙引號括起來的字串與變數資訊:

而如果只需要某個命令的輸出值,可以像命令這樣,將命令用反引號括起來,達到預期的效果,例如,將反引號與uname -a命令結合,然后使用echo命令
來查看本機的Linux版本和內核資訊:

三、環境變數
在Linux系統中,變數名稱一般都是大寫的,命令則都是小寫的,這是一種約定俗成的規范,Linux系統中的環境變數是用來定義系統運行環境的一些引數,比如每個用戶不同的家目錄、郵件存放位置等,可以直接通過變數名稱來提取到對應的變數值,
為了更好地幫助大家理解變數的作用,給大家舉個例子,前文中曾經講到,在Linux系統中一切都是檔案,Linux命令也不例外,那么,在用戶執行了一條命令之后,Linux系統中到底發生了什么事情呢?簡單來說,命令在Linux中的執行分為4個步驟,
第1步:判斷用戶是否以絕對路徑或相對路徑的方式輸入命令(如/bin/ls),如果是絕對路徑則直接執行,否則進入第2步繼續判斷,
第2步:Linux系統檢查用戶輸入的命令是否為“別名命令”,即用一個自定義的命令名稱來替換原本的命令名稱,
使用rm命令洗掉檔案時,Linux系統都會要求用戶確認是否執行洗掉操作,其實這就是Linux系統為了防止用戶誤洗掉檔案而特意設定的rm別名命令—“rm -i”,

可以用alias命令來創建一個屬于自己的命令別名,語法格式為“alias別名=命令”,若要取消一個命令別名,則是用unalias命令,語法格式為“unalias別名”,

第3步:Bash解釋器判斷用戶輸入的是內部命令還是外部命令,內部命令是解釋器內部的指令,會被直接執行;而用戶在絕大部分時間輸入的是外部命令,這些命令交由步驟4繼續處理,可以使用“type命令名稱”來判斷用戶輸入的命令是內部命令還是外部命令:

第4步:系統在多個路徑中查找用戶輸入的命令檔案,而定義這些路徑的變數叫作PATH,可以簡單地把它理解成是“解釋器的小助手”,作用是告訴Bash解釋器待執行的命令可能存放的位置,然后Bash解釋器就會乖乖地在這些位置中逐個查找,PATH是由多個路徑值組成的變數,每個路徑值之間用冒號間隔,對這些路徑的增加和洗掉操作將影響到Bash解釋器對Linux命令的查找,

常見環境變數:

Linux作為一個多用戶、多任務的作業系統,能夠為每個用戶提供獨立的、合適的作業運行環境,因此,一個相同的變數會因為用戶身份的不同而具有不同的值,

其實變數是由固定的變數名與用戶或系統設定的變數值兩部分組成的,我們完全可以自行創建變數來滿足作業需求,例如,設定一個名稱為WORKDIR的變數,方便用戶更輕松地進入一個層次較深的目錄:

但是這樣的變數不具有全域性,如果作業需要,可以使用export命令將其提升為全域變數,這樣其他用戶也就可以使用它了:
后續要是不使用這個變數了,則可執行unset命令把它取消掉:
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/473372.html
標籤:Linux
