Linux之bash特性
阿新 • • 發佈:2018-12-31
什麼是shell?
字面意思:殼,充當人機互動的翻譯官,當用戶輸入一條命令,shell就會解析。shell位於作業系統外層,負責與使用者互動。
shell型別:可以檢視/etc/shells檔案,bash shell作為系統的預設shell,比較流行,bash有眾多特性。
檢視系統當前shell:#echo $SHELL
- 命令歷史記錄
- 命令/目錄補全功能
- 命令列展開
- 命令的執行結果
- 快捷鍵
- glob萬用字元
- 多命令執行
-
命令歷史記錄
shell程序會將儲存此前使用者提交執行過的命令,儲存在使用者家目錄:~/.bash_history
檢視:#history
可以通過修改環境變數實現history的配置:
HISTSIZE:shell程序儲存的歷史條數,預設1000
HISTFILE:儲存資料的檔案- 用法:
history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
-c:清空歷史
-d offset:刪除指定命令歷史
-r:從檔案讀取命令歷史至歷史列表中;
-w:把歷史列表中的命令追加至歷史檔案中
n:顯示歷史的第幾條命令 - 呼叫命令歷史列表中的命令:
!#:再一次執行歷史列表中的第#條命令;
!!:再一次執行上一條命令;
!STRING:再一次執行命令歷史列表中最近一個以STRING開頭的命令; - 呼叫上一條命令的最後一個引數
快捷鍵:esc,. #先按ESC鍵再按.號鍵
特殊字元: !$
- 用法:
-
命令/目錄補全功能
在mini系統安裝,引數不能補齊,需要安裝一個包:bash-completion-
命令補齊:Tab鍵補齊
命令查詢機制: 查詢內部命令--> 根據PATH環境變數中設定的目錄,自左而右逐個搜尋目錄下的檔名; - 路徑補齊:
在給定的起始路徑下,以對應路徑下的打頭字串來逐一匹配起始路徑下的每個檔案:
tab:如果是唯一標識,則直接補全,否則,再按一次tab會給出列表供選擇
-
- 命令列展開
~:自動展開為使用者的家目錄,或指定的使用者的家目錄;
{}:可承載一個以逗號分隔的路徑列表,並能夠將其展開為多個路徑; - 命令的執行結果
判斷命令的結果是否執行成功,通過返回狀態碼判斷,命令執行完後,狀態碼儲存在bash的特殊變數中:$?
0:表示成功
1~255:表示失敗 - 快捷鍵
Ctrl+a:跳轉至命令列行首 ==home鍵 Ctrl+e:跳轉至命令列行尾 ==end鍵 Ctrl+u:刪除行首至游標所在處之間的所有字元; Ctrl+k:刪除游標所在處至行尾的所有字元; Ctrl+l:清屏,相當於clear Ctrl+w:在游標處起往前刪除一個單詞 Ctrl+<-|->:Ctrl加左右鍵快速往前完後移動游標
- glob萬用字元
匹配模式:元字元
*:匹配任意長度的任意字元
pa*, *pa*, *pa, *p*a*
pa, paa, passwd
?:匹配任意單個字元
pa?, ??pa, p?a, p?a?
pa, paa, passwd
[]:匹配指定範圍內的任意單個字元
有幾種特殊格式:
[a-z], [A-Z], [0-9], [a-z0-9]
[[:upper:]]:所有大寫字母
[[:lower:]]:所有小寫字母
[[:alpha:]]:所有字母
[[:digit:]]:所有數字
[[:alnum:]]:所有的字母和數字
[[:space:]]:所有空白字元
[[:punct:]]:所有標點符號
例如:匹配pa##的檔案,2開頭的三位數
pa[0-9][0-9], 2[0-9][0-9]
[^]:匹配指定範圍外的任意單個字元
[^[:upper:]]
[^0-9]
[^[:alnum:]]
- 多命令執行
COMMAND1; COMMAND2; COMMAND3; ...
邏輯關係:
與: &&
或: ||
非: !
COMMAND1 && COMMAND2
COMMAND1為“假”,則COMMAND2不會再執行;
否則,COMMAND1為“真”,則COMMAND2必須執行;
COMMAND1 || COMMAND2
COMMAND1為“真”,則COMMAND2不會再執行;
否則,COMMAND1為“假”,則COMMAND2必須執行;
! COMMAND:COMMAND為真則為假,反之亦然。