CentOS系統Shell程式設計語言基礎之Bash的基礎特性簡介

來源:互聯網
上載者:User

標籤:href   逗號   修改   執行   ace   之間   提交   命令補全   空白   

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 +數字:顯示最近的“數字”條命令

調用命令曆史列表中的命令:

!+數字:再一次執行曆史列表中的第“數字”條命令
!!:再一次執行上一條命令
!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;]]:所有非大寫字母

pa[0-9][0-9], ?2[0-9]0-9

練習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必須執行
?
? ? ? ? ? ? 例:[[email protected] ~]# touch /tmp/test.etc && ls /etc > /tmp/test.etc
? ? ? ? ? ? ? ? ?[[email protected] ~]# cat /tmp/test.etc
?
? ? ? ? ?~]#COMMAND1 || COMMAND2
? ? ? ? ? ? ? ? COMMAND1為“真”,則COMMAND2不會再執行
? ? ? ? ? ? ? ? 否則,COMMAND1為“假”,則COMMAND2必須執行
?
? ? ? ? ? ? ?例:[[email protected] ~]# id user1 || useradd user1
? ? ? ? ? ? ? ? ?id: user1:無此使用者
? ? ? ? ? ? ? ? ?[[email protected] ~]# id user1
? ? ? ? ? ? ? ? ? uid=2003(user1) gid=2003(user1) 組=2003(user1)

CentOS系統Shell程式設計語言基礎之Bash的基礎特性簡介

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.