bash的基礎(chǔ)特性

本篇內(nèi)容介紹了“bash的基礎(chǔ)特性”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站主營(yíng)鄄城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app開發(fā)定制,鄄城h5微信平臺(tái)小程序開發(fā)搭建,鄄城網(wǎng)站營(yíng)銷推廣歡迎鄄城等地區(qū)企業(yè)咨詢

一、bash特性
1. 命令歷史: history
   .bash_history:用戶登出時(shí)保存命令歷史的文件(用戶家目錄下的隱藏文件)
   history #:顯示最近的#條命令;  
   調(diào)用命令歷史列表中的命令
        !#:再一次執(zhí)行歷史列表中的第#條命令;
        !!:再一次執(zhí)行上一條命令;
        !STRING:再一次執(zhí)行命令歷史列表中最近一個(gè)以STRING開頭的命令;
   調(diào)用上一條命令的最后一個(gè)參數(shù):
快捷鍵:ESC, .     (ESC松開后再按.)
快捷鍵:Alt+.      (按住Alt再按.)
字符串:!$         (直接輸入!$)
[root@localhost local]# cat /tmp/script/idsum1.sh 
......
[root@localhost local]# vi !$
vi /tmp/script/idsum1.sh
2.補(bǔ)全:
       命令補(bǔ)全: 能唯一標(biāo)識(shí),則直接Tab補(bǔ)全,不能的話,再按一次Tab給出列表;
           外部命令根據(jù)PATH環(huán)境變量中設(shè)定的目錄,自左而右逐個(gè)搜索目錄下的文件名
       路徑補(bǔ)全: 唯一標(biāo)識(shí)Tab補(bǔ)全,不能的話,再按一次Tab給出列表;
3.命令行展開
 ~:自動(dòng)展開為用戶的家目錄,或指定的用戶的家目錄;
 {}:可承載一個(gè)以逗號(hào)分隔的路徑列表,并能夠?qū)⑵湔归_為多個(gè)路徑;
[root@localhost tmp]# ls x_{y,z}
x_y:
afile1  afile2
x_z:
afile3  afile4
4.命令的狀態(tài)執(zhí)行結(jié)果
    成功: 返回0;
    失?。?nbsp;1~255;
    命令執(zhí)行完成后,執(zhí)行狀態(tài)保存在bash的特殊變量$?中;
[root@localhost x_z]# useradd yc
[root@localhost x_z]# echo $?
[root@localhost x_z]# useradd yc
useradd: user 'yc' already exists
[root@localhost x_z]# echo $?
9
    命令正常執(zhí)行時(shí),有的還會(huì)有命令返回值,根據(jù)命令及其功能不同,結(jié)果各不相同。
    引用命令的執(zhí)行結(jié)果:$(COMMAND)或~(COMMAND)
5.引用
    強(qiáng)引用:?jiǎn)我?hào),其中任何內(nèi)容直接顯示,不做替換。
    弱引用:雙引號(hào),其中變量做變量替換,將出現(xiàn)變量的地方替換成變量的值。
    命令引用:反單引號(hào),就是引用命令執(zhí)行結(jié)果,$(COMMAND)或~(COMMAND)。
[root@localhost x_z]# name="YC"
[root@localhost x_z]# echo '$name'
$name    
[root@localhost x_z]# echo "$name"
YC
[root@localhost x_z]# mkdir dir_`date +%h-%M-%S`
[root@localhost x_z]# ls
afiel3  afile4  dir_Jul-48-03
6.快捷鍵
  ctrl+a : 跳至命令行首;
  ctrl+c : 跳至命令行尾;
  ctrl+u : 刪除從行首到光標(biāo);
  ctrl+k : 刪除從光標(biāo)到行尾;
  ctrl+l : clear;
7. 文件通配符 globbing
      通配符實(shí)際上是一種shell實(shí)現(xiàn)的路徑擴(kuò)展功能,當(dāng)shell在“參數(shù)”中遇到通配符后,
  會(huì)將其當(dāng)做路徑或文件名在磁盤上搜尋可能的匹配。
      * : 匹配任意長(zhǎng)度任意字符;
      ? : 匹配任意單個(gè)字符,如??pa,p?a?;
      []: 匹配指定范圍內(nèi)的任意單個(gè)字符;
          有幾種特殊格式: [a-z];[A-Z];[0-9];[a-z0-9]
          [[:upper:]]  :  所有大寫字母  
          [[:lower:]]  :  所有小寫字母
          [[:digit:]]  :  所有數(shù)字
          [[:alpha:]]  :  所有字母
          [[:alnum:]]  :  所有字母和數(shù)字
          [[:space:]]  :  空格字符
          [[:punct:]]  :  所有標(biāo)點(diǎn)符號(hào)
   不記得沒(méi)關(guān)系,man grep里面有:Their names are self explanatory, and
       they  are  [:alnum:],   [:alpha:],   [:cntrl:],   [:digit:],   [:graph:],
       [:lower:],  [:print:],  [:punct:],  [:space:], [:upper:], and [:xdigit:].
       For example, [[:alnum:]] means the character class of numbers and letters
       in  the current locale. In the C locale and ASCII character set encoding,
       this is the same as [0-9A-Za-z]
  ^[]: 匹配指定范圍外的任意單個(gè)字符;
       [^[:upper:]]
       [^a-z]
   示例:
[root@localhost x_z]# ls *[Ff]ile*      ---含F(xiàn)ile或者file的文件名
afile4  myfile  MyFile  myfile_002
[root@localhost x_z]# find /tmp/x_z/ -name  "*[^[:alpha:]]*"  ---含非字母的文件名
/tmp/x_z/
/tmp/x_z/afile4
/tmp/x_z/afiel3
/tmp/x_z/dir_Jul-48-03
/tmp/x_z/1.txt
/tmp/x_z/myfile_002
[root@localhost x_z]# find /tmp/x_z/ -name  "*[^a-z]*"   ---含非小寫字母的文件名
/tmp/x_z/
/tmp/x_z/afile4
/tmp/x_z/afiel3
/tmp/x_z/dir_Jul-48-03
/tmp/x_z/1.txt
/tmp/x_z/myfile_002
/tmp/x_z/MyFile
二、正則表達(dá)式
   由一類特殊字符集文本字符所編寫的模式,其中有些字符不表示其字面意義(要表示要用轉(zhuǎn)義字符/),而是用于表示控制或者統(tǒng)配的功能。
       表達(dá)式組成:原義文本字符+元字符
   元字符:指那些在正則表達(dá)式中具有特殊意義的專用字符,它使正則表達(dá)式具有處理能力。
   grep:Global search Regular expression and print out the line
        文本搜索工具,根據(jù)用戶指定的模式(過(guò)濾條件)對(duì)目標(biāo)文件逐行進(jìn)行匹配檢查,打印匹配的行;
        正則表達(dá)式引擎:元字符及規(guī)則因引擎的不同略有不同。
        grep [OPTIONS] PATTERN [FILE...]
        grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
        OPIONTS:
          -i : 不區(qū)分大小寫(ignore case);
          -o : 僅顯示匹配到的字符;
          -v : 顯示不能匹配到的行;
          -q : 不輸出任何信息(當(dāng)只需要執(zhí)行結(jié)果狀態(tài)時(shí)使用)
          -E : 支持?jǐn)U展正則表達(dá)式
          -A #: after 匹配行的后#行
          -B #: before匹配行的前#行
          -C #: context 匹配行的前后#行
    基本正則表達(dá)式元字符:
        字符匹配
      . : 匹配任意單個(gè)字符;
      []: 匹配指定范圍內(nèi)的任意單個(gè)字符;
          有幾種特殊格式: [a-z];[A-Z];[0-9];[a-z0-9]
          [[:upper:]]  :  所有大寫字母  
          [[:lower:]]  :  所有小寫字母
          [[:digit:]]  :  所有數(shù)字
          [[:alpha:]]  :  所有字母
          [[:alnum:]]  :  所有字母和數(shù)字
          [[:space:]]  :  空格字符
          [[:punct:]]  :  所有標(biāo)點(diǎn)符號(hào)
  man grep里面:Their names are self explanatory, and
       they  are  [:alnum:],   [:alpha:],   [:cntrl:],   [:digit:],   [:graph:],
       [:lower:],  [:print:],  [:punct:],  [:space:], [:upper:], and [:xdigit:].
       For example, [[:alnum:]] means the character class of numbers and letters
       in  the current locale. In the C locale and ASCII character set encoding,
       this is the same as [0-9A-Za-z]
  ^[]: 匹配指定范圍外的任意單個(gè)字符;
       [^[:upper:]]
次數(shù)匹配: 指定出現(xiàn)的次數(shù)的字符后面,限制前面字符出現(xiàn)的次數(shù),實(shí)行貪婪模式
           貪婪模式:在整個(gè)表達(dá)式匹配成功的前提下,盡可能多的匹配;
       *   : 匹配前面字符的任意次,0次,1次或者多次
       .*  : 匹配前面任意長(zhǎng)度的任意字符;
       \?  : 匹配前面字符0次或者1次,即可有可無(wú);
       \+  : 匹配前面字符1次或者多次,即必存在;
       \{m\} : 匹配前面字符指定m次;
       \{m,n\} : 匹配前面字符至少m次,至多n次;
            \{0,n\}  : 匹配前面字符至多n次;
            \{m,\}  : 匹配前面字符至少m次;
               位置錨定: 
   ^  : 行首錨定
   $  : 行尾錨定;
      ^PATTEERN$  : 用PATTERN來(lái)匹配整行;
      ^$  : 空白行;
      ^[[:space:]]*$ : 空行或者包含空白字符的行;
單詞錨定:
                     \<或者\(yùn)b : 詞首錨定,放在詞的前面;
     \>或者\(yùn)b : 詞尾錨定,放在詞的后面;
      \<PATTEERN\>  : 匹配完整單詞PATTERN;
分組及引用
   \(\)   :將一個(gè)或者多個(gè)字符捆綁在一起,作為一個(gè)整體處理;用括號(hào)括起來(lái),表示括號(hào)時(shí)要用轉(zhuǎn)義字符;
               注意:分組括號(hào)中的模式匹配到的內(nèi)容會(huì)被正則表達(dá)式引擎自動(dòng)記錄于內(nèi)部變量中,這些變量為:
                  \1:  模式從左邊起,第一個(gè)左括號(hào)以及與之匹配的右括號(hào)之間的模式所匹配到的字符;
                  \2:  模式從左邊起,第二個(gè)左括號(hào)以及與之匹配的右括號(hào)之間的模式所匹配到的字符;
                  \3:  
            后項(xiàng)引用: 引用前面的分組括號(hào)中的模式所匹配的字符;

    練習(xí):

    2. 顯示/etc/passwd文件中不以/bin/bash結(jié)尾的行

[root@localhost x_z]# grep   -v “/bin/bash$” /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
......

    3. 找出/etc/passwd中包含二位數(shù)字或者三位數(shù)字的行

[root@localhost x_z]# grep "\<[[:digit:]]\{2,3\}\>" /etc/passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
......

    4. 顯示/porc/meminfo文件中大寫或者小寫S開頭的行     

[root@localhost x_z]# grep "^[Ss]\+*" /proc/meminfo   ----錯(cuò)誤示范,這個(gè)*可以是0次,沒(méi)有s也行;
MemTotal:        3868768 kB
MemFree:         2927360 kB
....
[root@localhost x_z]# grep "^[Ss]\+" /proc/meminfo 
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              9368 kB
Slab:             149628 kB
SReclaimable:      85044 kB
SUnreclaim:        64584 kB
[root@localhost x_z]# grep -i "^[s]\+" /proc/meminfo 
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              9368 kB
Slab:             149628 kB
SReclaimable:      85044 kB
SUnreclaim:        64584 kB
[root@localhost x_z]# grep -E "^(s|S)+" /proc/meminfo 
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              9368 kB
Slab:             149788 kB
SReclaimable:      85028 kB
SUnreclaim:        64760 kB
    egrep 支持?jǐn)U展的正則表達(dá)式,實(shí)現(xiàn)grep文本過(guò)濾功能;grep -E
      -i;-o;-v;-q;-G(基本正則表達(dá)式)
      支持?jǐn)U展正則表達(dá)式元字符:
        字符匹配
      . : 匹配任意單個(gè)字符;
      []: 匹配指定范圍內(nèi)的任意單個(gè)字符;
       ^[]: 匹配指定范圍外的任意單個(gè)字符;
次數(shù)匹配: 指定出現(xiàn)的次數(shù)的字符后面,限制前面字符出現(xiàn)的次數(shù),實(shí)行貪婪模式
   貪婪模式:在整個(gè)表達(dá)式匹配成功的前提下,盡可能多的匹配;
   *   : 匹配前面字符的任意次,0次,1次或者多次
   .*  : 匹配前面任意長(zhǎng)度的任意字符;
   ?  : 匹配前面字符0次或者1次,即可有可無(wú);
   +  : 匹配前面字符1次或者多次,即必存在;
   {m} : 匹配前面字符指定m次;
   {m,n} : 匹配前面字符至少m次,至多n次;
      {0,n}  : 匹配前面字符至多n次;
      {m,}  : 匹配前面字符至少m次;
               位置錨定: 
   ^  : 行首錨定
   $  : 行尾錨定;
        ^PATTEERN$  : 用PATTERN來(lái)匹配整行;
        ^$  : 空白行;
        ^[[:space:]]*$ : 空行或者包含空白字符的行;
單詞錨定:
   \<或者\(yùn)b : 詞首錨定,放在詞的前面;
   \>或者\(yùn)b : 詞尾錨定,放在詞的后面;
      \<PATTEERN\>  : 匹配完整單詞PATTERN;
分組及引用
   ( ):將一個(gè)或者多個(gè)字符捆綁在一起,作為一個(gè)整體處理;用括號(hào)括起來(lái),表示括號(hào)時(shí)要用轉(zhuǎn)義字符;
        注意:分組括號(hào)中的模式匹配到的內(nèi)容會(huì)被正則表達(dá)式引擎自動(dòng)記錄于內(nèi)部變量中,這些變量為:
                  \1: 模式從左邊起,第一個(gè)左括號(hào)以及與之匹配的右括號(hào)之間的模式所匹配到的字符;
                  \2: 模式從左邊起,第二個(gè)左括號(hào)以及與之匹配的右括號(hào)之間的模式所匹配到的字符;
                  \3:  
后項(xiàng)引用: 引用前面的分組括號(hào)中的模式所匹配的字符; 
或 a|b
     如  C|cat 表示C或者cat;
     (C|c)at 表示Cat或者cat;

    練習(xí):

        5. 使用echo輸出一個(gè)絕對(duì)路徑,使用egrep取出路徑名,類似執(zhí)行dirname /etc/passwd的結(jié)果。

[root@localhost pp]# pwd
/tmp/x_z/pp
[root@localhost pp]# ls
YC.sh
[root@localhost pp]# dirname /tmp/x_z/pp/YC.sh 
/tmp/x_z/pp
[root@localhost pp]# echo /tmp/x_z/pp/YC.sh | grep -E  ".*/\<"    ----顯示匹配的行全部
/tmp/x_z/pp/YC.sh
[root@localhost pp]# echo /tmp/x_z/pp/YC.sh | grep -E -o ".*/\<" 
/tmp/x_z/pp/

        6. 找出ifconfig的IP地址,要求結(jié)果中只顯示IP地址。

[root@localhost pp]# ifconfig  | grep -Eo "(\<([0-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>.){3}
\<([0-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
192.167.1.23
255.255.255.0
192.167.1.255
127.0.0.1
255.0.0.0
fgrep: 不支持正則表達(dá)式元字符,任何符號(hào)都是字符;
     當(dāng)無(wú)需要用到元字符去編寫模式時(shí),使用fgrep會(huì)更好。

“bash的基礎(chǔ)特性”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

網(wǎng)站名稱:bash的基礎(chǔ)特性
標(biāo)題URL:http://www.muchs.cn/article18/gjgpdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、品牌網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)公司云服務(wù)器、企業(yè)建站、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司