CentOS系統Shell編程語言基礎之Bash的基礎特性

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

(1)
ListenListen
上一篇 2018-06-27
下一篇 2018-06-27

相關推薦

  • 正則表達式淺解

    正則表達式:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能。 擴展正則表達式元字符: 字符匹配:. 匹配任意單個字符[] 匹配指定范圍內的任意單個字符[^] 匹配指定范圍外的任意單個字符[:alnum:] 字母和數字[:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z[:lower:] 小…

    2018-04-07
  • 09葵花寶典Openssl和DNS

    openssl cd bind named

    Linux筆記 2018-05-16
  • LAMP架構實現

    LAMP是一組Web應用軟件的組合,Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一組常用來搭建動態網站或者服務器的開源軟件,所有組成產品均是開源軟件,本身都是各自獨立的程序,但是因為常被放在一起使用,擁有了越來越高的兼容度,共同組成了一個強大的Web應用程序平臺。

    2018-06-23
  • 關于grep 與 正則表達式的那些事

    首先要記住的是: 正則表達式與通配符不一樣,它們表示的含義并不相同! 正則表達式只是一種表示法,只要工具支持這種表示法, 那么該工具就可以處理正則表達式的字符串。vim、grep、awk 、sed 都支持正則表達式,也正是因為由于它們支持正則,才顯 得它們強大grep (縮寫來自Globally search a Regular Expression and…

    Linux筆記 2018-04-08
  • FTP服務介紹及相關實驗

    FTP是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用于Internet上的控制文件的雙向傳輸。FTP協議是早期的三個應用級協議之一。

    2018-06-26
  • Linux 命令

    screen 創建會話

    2018-04-07
欧美性久久久久