命令歷史:shell進程會其會話中保存此前用戶提交執行過的命令;git
~]#history算法
定製history的功能,可經過環境白能量實現;shell
HISTSIZE:shell進程可保留的命令歷史的條數編程
HSITFILE:持久保存命令歷史的文件緩存
.bash_historybash
HISTFIELSIZE:命令歷史文件的大小;數據結構
命令用法:編程語言
history[-c] [-d 偏移量] [n]ide
或 history –anrw[文件名]函數
或history –ps 參數 [參數…]
-c:清空命令歷史;
-doffset:刪除指定命令歷史
-r:從文件讀取命令歷史之歷史列表中;
-w:把歷史列表中的命令追加至歷史文件中;
history#:顯示最近的#條命令;
調用命令歷史列表中的命令
!#:再一次執行歷史列表中的第#條命令;
!!:再一次執行上一條命令;
!STRING:再一次執行命令歷史列表中最近一個以STRING開頭的命令;
注意:命令的重複執行有時候須要依賴於冪等性;
調用上一條命令的最後一個參數:
快捷鍵:Esc, .
字符串:!$
控制命令歷史記錄的方式;
環境變量:HISTCONFTROL
ignoredups:忽略重複的命令;
ignorespace:忽略以空白字符開頭的命令;
ignoreboth:以上二者同時生效;
修改變量的值:
NAME=’VALUE’
命令補全:
shell程序在接收到用戶執行命令的請求,分析完成以後,最左側的字符串會被看成命令;
命令查找機制:
查找內部命令;
根據PATH環境變量中設定的目錄,自左而右逐個搜索目錄下的文件名;
給定的打頭字符串若是能唯一標識某命令程序文件,則直接補全;
不能唯一標識某命令程序文件,再擊tab鍵一次,會給出列表;
路徑補全:
在給定的起始路徑下,以對應路徑下的打頭字串來逐一匹配起始路徑下的每一個文件:
tab:
若是能唯一標識,則直接補全;
不然,再一次tab,給出列表;
~:自動展開爲用戶的家目錄,或指定的用戶的家目錄;
{}:可承載一個以逗號分隔的路徑列表,並可以將其展開爲多個路徑;
例如:/tmp/{a,b}至關於 /tmp/a /tmp/b
命令執行的狀態結果:
bash經過狀態返回值來輸出此結果:
成功:0
失敗:1-255
命令執行完成以後,其狀態返回值保存於bash的特殊變量$?中;
命令正常執行時,有的還回有命令返回值:
根據命令及其功能不一樣,結果各不相同;
引用命令的執行結果:
$(COMMAND)
或`COMMAND`
強引用:''
弱引用:""
命令引用:``
Ctrl+a:跳轉至命令行行首
Ctrl+e:跳轉至命令行行尾
Ctrl+u:刪除行首至光標所在處之間的全部字符;
Ctrl+k:刪除光標所在處至行尾的全部字符;
Ctrl+l:清屏,至關於clear
globbing:文件名通配(總體文件名匹配,而非部分)
匹配模式:元字符
*:匹配任意長度的任意字符
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[0-9][0-9],2[0-9][0-9]
[^]:匹配指定範圍外的任意單個字符
[^[:upper:]]
[^0-9]
[^[:alnum:]]
緩存此前命令的查找結果:key-value
key:搜索鍵
value:值
hash命令:
hash:列出
hash-d COMMAND:刪除
hash-r:清空
程序:指令+數據
指令:由程序文件提供;
數據:IO設備、文件、管道、變量
程序:算法+數據結構
變量名+指向的內存空間
變量賦值:name=value
變量類型:存儲格式、表示數據範圍、參與的運算
編程語言:
強類型變量
弱類型變量:
bash把全部變量通通視做字符型;
bash中的變量無需事先聲明;至關於,把聲明和賦值過程同時實現;
聲明:類型,變量名
變量替換:把變量名出現的位置替換爲其所指向的內存空間中數據;
變量引用:${var_name},$var_name
變量名:變量名只能包含數字、字母和下劃線,並且不能以數字開頭;
變量名:見名知義,命名機制遵循某種法則;不可以使用程序的保留字,例如if, else, then, while等等;
bash變量類型:
本地變量:做用域僅爲當前shell進程;
環境變量:做用域爲當前shell進程及其子進程;
局部變量:做用域僅爲某代碼片段(函數上下文);
位置參數變量:當執行腳本的shell進程傳遞的參數;
特殊變量:shell內置的有特殊功用的變量;
$?:
0:成功
1-255:失敗
本地變量:
變量賦值:name=value
變量引用:${name},$name
"":變量名會替換爲其值;
'':變量名不會替換爲其值;
查看變量:set
撤銷變量:unsetname
注意:此處非變量引用;
環境變量:
變量賦值:
(1)export name=value
(2)name=value
export name
(3)declare -x name=value
(4)name=value
declare-x name
變量引用:${name},$name
注意:bash內嵌了許多環境變量(一般爲全大寫字符),用於定義bash的工做環境
PATH,HISTFILE, HISTSIZE, HISTFILESIZE, HISTCONTROL, SHELL, HOME, UID, PWD, OLDPWD
查看環境變量:export,declare -x, printenv, env
撤銷環境變量:unsetname
只讀變量:
(1)declare -r name
(2)readonly name
只讀變量沒法從新賦值,而且不支持撤銷;存活時間爲當前shell進程的生命週期,隨shell進程終止而終止;
~]#COMMAND1; COMMAND2; COMMAND3; ...
邏輯運算:
運算數:真(true,yes, on, 1)
假(false, no, off, 0)
與:
1&& 1 = 1
1&& 0 = 0
0&& 1 = 0
0&& 0 = 0
或:
1|| 1 = 1
1|| 0 = 1
0|| 1 = 1
0|| 0 = 0
非:
!1 = 0
!0 = 1
短路法則:
~]#COMMAND1 && COMMAND2
COMMAND1爲「假」,則COMMAND2不會再執行;
不然,COMMAND1爲「真」,則COMMAND2必須執行;
~]#COMMAND1 || COMMAND2
COMMAND1爲「真」,則COMMAND2不會再執行;
不然,COMMAND1爲「假」,則COMMAND2必須執行;
示例:~]# id$username || useradd $username