bash的基礎特性:
命令補全:
Shell程序在接收到用戶執行命令的請求,分析完成之後,最左側的字符串會被當作命令;
命令查找機制:
查找內部命令;
根據PATH環境變量中設定的目錄,自左而右逐個搜索目錄下的文件名;
給定的打頭字符串如果能唯一標識某目錄程序文件,則直接補全;
不能唯一標識某目錄程序文件,再擊tab鍵一次,會給出列表;
路徑補全:
在給定的起始路徑下,以對應路徑下的打頭字符串來逐一匹配起始路徑下的每個文件;
tab:
如果能唯一標識,則直接補全;
否則,再一次tab,給出列表;
命令行展開
~:自動展開爲用戶的家目錄,或指定的用戶的家目錄;
{}:可承載一個以逗號分隔的路徑列表,並能夠將其展開爲多個路徑:
例如:/tmp/{a,b} 相當於 /tmp/a /tmp/b
問題1:如何創建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b ?
~]# mkdir -pv /tmp/x/{y1/{a,b},y2}
問題2:如何創建a_c,a_d,b_c,b_d;
~]# mkdir {a,b}_{c,d} -v
mkdir: created directory `a_c'
mkdir: created directory `a_d'
mkdir: created directory `b_c'
mkdir: created directory `b_d'
bash的命令執行狀態結果
bash通過狀態返回值來輸出此結果;
成功:0
失敗:1-255
命令執行完成之後,其狀態返回值保存於bash的特殊變量$?中;
~]# pwd
/root
~]# echo $?
0
命令正常執行時,有的還會有命令返回值;
根據命令及其功能不同,結果各不相同;
引用命令的執行結果:
$(COMMAND)
或’COMMAND‘
Bash的基於特性:引用
強引用:‘’
弱引用:“”
命令引用:‘’
實例:
[root@localhost tmp]# ls
a hello
[root@localhost tmp]# mkdir $(date +%H-%M-%S-%T)
[root@localhost tmp]# ls
20-51-40-20:51:40 a hello
Bash基礎特性:快捷鍵
Ctrl+a:跳轉至命令行行首
Ctrl+e:跳轉至命令行行尾
Ctrl+u:刪除行首至光標所在處之間的所有字符;
Ctrl+k:刪除光標所在處至行尾的所有字符;
Ctrl+l:清屏,相當於clear
基礎特性之 文件名通配
globbing:文件名通配
匹配模式:元字符
* :匹配任意長度的任意字符
Pa* , *pa* , *pa , *p*a*
? :匹配任意單個字符
Pa?
[] :匹配指定範圍內的任意單個字符
有幾種特殊格式:
[a-z],[A-Z],[0-9],[a-z0-9]
[[:upper:]] :所有大寫字母
[[:lower:]]:所有小寫字母
[[:alpha:]]:所有字母
[[:digit:]]:所有數字
[[:alnum:]]:所有數字和字母
[[:space:]]:所有空白字符
[[:punct:]]:所有標點符號
[^]: 匹配指定範圍外的任意單個字符
[^[:upper:]]
[^0-9]
[^[:alnum:]]
實例:
練習1:顯示/var目錄下所有以L開頭,以一個小寫字母結尾,且中間出現一位任意字符的文件或目錄;
練習2:顯示/etc目錄下,以任意一位數字開頭,且以非數字結尾的文件或目錄;
練習3:顯示/etc目錄下,以非字母開頭,後面跟一個字母及其它任意長度任意字符的文件或目錄;
練習4:複製/etc目錄下,所有以m開頭,以非數字結尾的文件或目錄至/tmp/itxuezhe.com目錄;
練習5:複製/usr/share/man目錄下,所有以man開頭,後跟一個數字結尾的文件或目錄至/tmp/man/目錄下;
練習6: 複製/etc目錄下,所有以.conf結尾,且以m,n,r,p開頭的文件或目錄至/tmp/conf.d/目錄下;
練習1:~]# ls -d /var/l?[[:lower:]]
/var/lib /var/log
練習2:~]# ls -d /etc/[0-9]*[^0-9]
/etc/3ab23y
練習3:~]# ls -d /etc/[^a-z][a-z]*
/etc/8eabc
練習4:~]# mkdir /tmp/maedu.com
~]# cp -r /etc/m*[^0-9] /tmp/maedu.com/
練習5:~]# mkdir /tmp/man
~]# cp -r /usr/share/man/man[0-9] /tmp/man
練習6:~]# cp -r /etc/[mnrp]*.conf /tmp/conf.d/
~]# ls /tmp/conf.d/man_db.conf named.conf