bash的基礎特性之命令歷史:
命令歷史:shell進程會在其會話中保存此前用戶提交執行過的命令
~]#history
定制history的功能,可通過環境變量實現
HISTSIZE:shell進程可保留的命令歷史的條數
HISTFILE:持久保存命令歷史的文件, “.bash_history”
HISTFILESIZE:命令歷史文件的大小
命令用法:
history [-c] [-d offset] [n]
or history -anrw [filename]
or history -ps arg [arg…]
命令常用選項:
-c:清空命令歷史
-d offset:刪除指定命令歷史
-r:從文件讀取命令歷史至歷史列表中
-w:把歷史列表中的命令追加至歷史文件中
history +數字:顯示最近的“數字”條命令
調用命令歷史列表中的命令:
!+數字:再一次執行歷史列表中的第“數字”條命令
?。。涸僖淮螆绦猩弦粭l命令
!STRING:再一次執行命令歷史列表中最近一個以STRING開頭的命令
注意:命令的重復執行有時候需要依賴于冪等性
調用上一條命令的最后一個參數:
快捷鍵:ESC ,.
字符串:!$
控制命令歷史記錄的方式:
環境變量:HISTCONTROL
ignoredups:忽略重復的命令
ignorespace:忽略以空白字符開頭的命令
ignoreboth:以上兩者同時生效
修改變量的值: NAME=’VALUE’,此修改只對當前shell有效
bash的基礎特性之命令補全:
命令補全:shell程序在接收到用戶執行命令的請求,分析完成之后,最左側的字符會被當作命令
命令查找機制:
查找內部命令
根據PATH環境變量中設定的目錄,自左而右逐個搜索目錄下的文件名
給定的打頭字符串如果能唯一標識某命令程序文件,則直接補全;
給定的打頭字符串如果不能唯一標識某命令程序文件,再擊tab鍵一次,會給出列表
路徑補全:
在給定的起始路徑下,以對應路徑下的打頭字符串來逐一匹配起始路徑下的每個文件
tab:如果能唯一標識某命令程序文件,則直接補全;如果不能唯一標識某命令程序文件,再擊tab鍵一次,會給出列表
bash的基礎特性之命令行展開:
~:自動展開為用戶的家目錄,或指定用戶的家目錄
{}:可承載一個以逗號分隔的路徑列表,并能夠將其展開為多個路徑
例如:/tmp/{a,b}相當于/tmp/a /tmp/b
bash的基礎特性之命令的執行狀態結果
命令執行的狀態結果:
bash通過狀態返回值來輸出此結果
成功:0
失敗:1-255
命令執行完成之后,其狀態返回值保存于bash的特殊變量”$?”中, ~]#echo $?
命令正常執行時,有的還會有命令返回值,根據命令及其功能不同,結果各不相同
引用命令的執行結果:
$(COMMAND) 或`COMMAND`
bash的基礎特性之引用:
強引用:‘’
弱引用:“”
命令引用:“(~位置)
bash的基礎特性之快捷鍵:
Ctrl+a:跳轉至命令行行首
Ctrl+e:跳轉至命令行行尾
Ctrl+u:刪除行首至光標所在處之間的所有字符
Ctrl+k:刪除光標所在處至行尾的所有字符
Ctrl+l:清屏,相當于clear命令
bash的基礎特性之globbing(文件名通配機制):
globbing:文件名通配機制(整體文件名匹配,而非部分)
匹配模式:元字符
*:匹配任意長度的任意字符
pa*:以pa開頭的所有文件
*pa*:文件名包含pa的文件
*pa:以pa結尾的文件
?:匹配任意單個字符
pa?:匹配以pa開始的下一個為p或a中任意一個的文件
[]:匹配指定范圍內的任意單個字符
有幾種特殊格式:
[a-z],[A-Z],[0-9],[a-z,0-9]
[[;upper;]]:所以大寫字母
[[;lower;]]:所有小寫字母
[[;alpha;]]:所有字符
[[;digit;]]:所有數字
[[;alnum;]]:所有的字母和數字
[[;sapce;]]:所有的空白字符
[[;punct;]]:所有標點符號
[^]:匹配指定范圍外的任意單個字符
[^[;upper;]]:所有非大寫字母
pa[0-9][0-9], ?2[0-9][0-9](表示200-299的數字)
練習1:顯示/var目錄下所有以l,以小寫字母結尾,且中間出現一位任意字符的文件或目錄
ls -d /var/l?[[;lower;]]
練習2:顯示/etc目錄下,以任意一位數字開頭,且以非數字結尾的文件或目錄
ls -d /etc/[0-9]*[^0-9]
練習3:顯示/etc目錄下,以非字母開頭,后面跟一個字母及其任意長度任意字符的文件或目錄
ls -d /etc/[^a-z][a-z]*
練習4:復制/etc目錄下,所有以m開頭,以非數字結尾的文件或目錄至/tmp/magedu.com目錄
cp -r /etc/m*[^0-9] /tmp/magedu.com
練習5:復制/usr/share/man目錄下,所有以man開頭,后跟一個數字結尾的文件或目錄至/tmp/man目錄下
cp -r /usr/share/man/man[0-9] /tmp/man
練習6:復制/etc目錄下,所有以.conf結尾,且以m,n,r,p開頭的文件或目錄至/tmp/conf.d目錄下
cp -r /etc/[mnrp]*.conf /tmp/conf.d
bash特性之命令hash:
緩存此前命令的查找結果:key-value
key:搜索鍵,value:值
hash命令
? ?hash:列出
? ?hash -d command :刪除
? ?hash- r :清空
bash的特性之變量:
程序:指令+數據
指令:由程序文件提供
數據:IO設備、文件、管道、變量
程序:算法+數據結構
變量名+指向的內存空間
變量賦值:name=value
變量類型:存儲格式、表示數據范圍、參與的運算
? ? 編程語言:
? ? ? ? ? ? 強類型變量
? ? ? ? ? ? 弱類型變量:
? ? ? ? ? ? ? ? ? ?bash把所有變量統統視作字符型
? ? ? ? ? ? ? ? ? ?bash中的變量無需事先聲明,相當于把聲明和賦值過程同時實現
? ? ? ? ? ? ? ? ? ? ? ? ? 聲明:聲明其類型,定義出其變量名稱
? ? ? ? ? ? 變量替換:把變量名出現的位置替換為其所指向的內存空間中數據
? ? ? ? ? ? 變量引用:${var_name},$var_name
? ? ? ? ? ? 變量名:變量名只能包含數字、字母和下劃線,而且不能以數字開頭
? ? ? ? ? ? 變量名:見名知義,命名機制遵循某種法則;不能夠使用程序的保留字,例如if,else,then,while等
? ? ? ? bash變量類型:
? ? ? ? ? ? ?本地變量:作用域僅為當前shell進程
? ? ? ? ? ? ?環境變量:作用域為當前shell進程及其子進程
? ? ? ? ? ? ?局部變量:作用域僅為某代碼片段(函數上下文)
? ? ? ? ? ? ?位置參數變量:向執行腳本的shell進程傳遞的參數
? ? ? ? ? ? ?特殊變量:shell內置的有特殊功用的變量
? ? ? ? ? ? ? ? ? ? ? $?:用于執行上一個命令的執行狀態結果
? ? ? ? ? ? ? ? 本地變量:
? ? ? ? ? ? ? ? ? ? 變量賦值:name=value
? ? ? ? ? ? ? ? ? ? 變量引用:${var_name},$var_name
? ? ? ? ? ? ? ? ? ? ? ? ?“”:變量名會替換為其值
? ? ? ? ? ? ? ? ? ? ? ? ?‘’:變量名不會替換為其值
? ? ? ? ? ? ? ? ? ? 查看變量:set
? ? ? ? ? ? ? ? ? ? 撤銷變量:unset name
? ? ? ? ? ? ? ? ? ? ? ? ? ? 注意:此處非變量引用
? ? ? ? ? ? ? 環境變量:
? ? ? ? ? ? ? ? ? 變量賦值:
? ? ? ? ? ? ? ? ? ? ? (1)export name=value
? ? ? ? ? ? ? ? ? ? ? (2)name=value
? ? ? ? ? ? ? ? ? ? ? ? ? ?exportname
? ? ? ? ? ? ? ? ? ? ?(3)declare -x name=value
? ? ? ? ? ? ? ? ? ? ?(4)name=value
? ? ? ? ? ? ? ? ? ? ? ? ? declare -x name
? ? ? ? ? ? ? ? ? ? ?變量引用:${name},$name
? ? ? ? ? ? ? 注意:bash內嵌了許多環境變量(通常為全大寫字符),用于定于bash的工作環境 (PATH,HISTFILE,HISTSIZE,HISTFILESIZE,UID)
? ? ? ? ? ? ? ? ?查看環境變量:export,declare -x,printenv,env
? ? ? ? ? ? ? ? ?撤銷變量:unset name
? ? ? ? ? 只讀變量:
? ? ? ? ? ?(1)declare -r name
? ? ? ? ? ?(2)readonly name
? ? ? ? ? ? ? ? 注意:只讀變量無法重新賦值,并且不支持撤銷,存貨時間為當前shell進程的生命周期,隨shell進程終止而終止
bash特性之多命令執行:
~]#COMMAND1;COMMAND2;COMMAND3;…
邏輯運算:
? ? ? 運算數:真(true,yes,on,1)
? ? ? ? ? ? ? ? ? ? ? 假(false,no,off,0)
? ? ? ? ? ?與:
? ? ? ? ? ? ? ?1 && 1 = 1
? ? ? ? ? ? ? ?1 && 0 = 0
? ? ? ? ? ? ? ?0 && 1 = 0
? ? ? ? ? ? ? ?0 && 0 = 0
? ? ? ? ?或:
? ? ? ? ? ? ? 1 || 0 =1
? ? ? ? ? ? ? 1 || 1 =1
? ? ? ? ? ? ? 0 || 1 =1
? ? ? ? ? ? ? 0 || 0 =0
? ? ? ? ?非:
? ? ? ? ? ? ? ! 1 = 0
? ? ? ? ? ? ? ! 0 = 1
? ?短路法則:
? ? ? ? ?~]#COMMAND1 && COMMAND2
? ? ? ? ? ? ? ? COMMAND1為“假”,則COMMAND2不會再執行
? ? ? ? ? ? ? ? 否則,COMMAND1為“真”,則COMMAND2必須執行
? ? ? ? ? ? 例:[root@localhost ~]# touch /tmp/test.etc && ls /etc > /tmp/test.etc
? ? ? ? ? ? ? ? ?[root@localhost ~]# cat /tmp/test.etc
? ? ? ? ?~]#COMMAND1 || COMMAND2
? ? ? ? ? ? ? ? COMMAND1為“真”,則COMMAND2不會再執行
? ? ? ? ? ? ? ? 否則,COMMAND1為“假”,則COMMAND2必須執行
? ? ? ? ? ? ?例:[root@localhost ~]# id user1 || useradd user1
? ? ? ? ? ? ? ? ?id: user1:無此用戶
? ? ? ? ? ? ? ? ?[root@localhost ~]# id user1
? ? ? ? ? ? ? ? ? uid=2003(user1) gid=2003(user1) 組=2003(user1)
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101835