1. 程式人生 > >易學筆記-Linux命令-第8章:從shell眼中看世界

易學筆記-Linux命令-第8章:從shell眼中看世界

第8章:從shell眼中看世界/8.0 echo:單詞分割機制

  1. 格式:echo  結果集,這裡的結果集可能是
    1. 某個字串:abc
    2. 多個字串:abc  edf
    3. 命令結果: ls   cal
  2. 分割原則:按結果集中的空格、製表符、換行符進行分割

第8章:從shell眼中看世界/8.1 echo:字元展開/8.1.1 空格隔開字串展開

  1. 展開原則:按空格展開,結果用單個空格隔開,不管中間有多少個空格
  2. 舉例:中間多個空格

    [[email protected] ~]# echo acd edf              xwt

    acd edf xwt


第8章:從shell眼中看世界/8.1 echo:字元展開/8.1.2 *展開

  1. 展開原則: 按當前目錄所有檔名展開
  2. 舉例:

    [[email protected] ~]# echo *

    err-output.txt ln_123 ls-output.txt ls.txt me mycat mycat2.txt mylog mysql.tar.gz q s_ln_123 s_ln_dir test.txt wys_bak


第8章:從shell眼中看世界/8.2 echo:路徑名展開/8.2.1 全檔名通配

  1. 展開原則:按某個匹配規則展開
  2. 舉例:

    [[email protected] ~]# echo m*

    me mycat mycat2.txt mylog mysql.tar.gz


第8章:從shell眼中看世界/8.2 echo:路徑名展開/8.2.2 部分路徑通配

  1. 展開原則:按路徑中*號的地方進行展開路徑名
  2. 舉例:

    [[email protected] ~]# echo /usr/*/bin

    /usr/local/bin


第8章:從shell眼中看世界/8.2 echo:路徑名展開/8.2.3 [[:class:]]形式匹配

  1. 展開原則:按[[:class:]]指定的萬用字元展開
  2. 舉例:

    [[email protected] ~]# echo [[:lower:]]*   首字母小寫展開

    err-output.txt ln_123 ls-output.txt ls.txt me mycat mycat2.txt mylog mysql.tar.gz q s_ln_123 s_ln_dir test.txt wys_bak


第8章:從shell眼中看世界/8.2 echo:路徑名展開/8.2.4 隱藏檔案展開

  1. 展開規則:隱藏檔名的首字母是.,所以按首字母的.展開
  2. 舉例:

    [[email protected] ~]# echo .*

    . .. .bash_history .bash_logout .bash_profile .bashrc .cache .config .cshrc .docker .java .lesshst .m2 .node-gyp .npm .oracle_jre_usage .pki .rnd .ssh .tcshrc .viminfo


第8章:從shell眼中看世界/8.3 echo:波浪線展開

  1. 展開原則:展開當前使用者的根目錄或者指定使用者的根目錄
  2. 舉例:

    [[email protected] ~]# echo ~

    /root

    [[email protected] ~]# echo ~root

    /root


第8章:從shell眼中看世界/8.4 echo:算術表示式展開

  1. 展開原則:按格式$((表示式))計算結果展開
  2. 注意:只支援整數進行算術運算
  3. 舉例:
    1. 加法

      [[email protected] ~]# echo $((2+2))

      4

    2. 減法

      [[email protected] ~]# echo $((2-2))

      0

    3. 乘法

      [[email protected] ~]# echo $((2*2))

      4

    4. 除法

      [[email protected] ~]# echo $((3/2))

      1

    5. 取餘

      [[email protected] ~]# echo $((3%2))

      1

    6. 取冪

      [[email protected] ~]# echo $((4**2))

      16


第8章:從shell眼中看世界/8.5 echo:花括號展開/8.5.1 集合元素展開

  1. 展開原則:按{元素1,元素2,元素n}元素展開,元素之間用,隔開
  2. 舉例:
    1. 單個花括號

      [[email protected] ~]# echo front-{A,B}-back

      front-A-back front-B-back

    2. 巢狀花括號

      [[email protected] ~]# echo front-{A{1,2},{3,4},B}-back

      front-A1-back front-A2-back front-3-back front-4-back front-B-back

    3.  

第8章:從shell眼中看世界/8.5 echo:花括號展開/8.5.2 連續元素展開

  1. 展開原則:按{開始序號..結束序號}規則展開
  2. 舉例:
    1. 連續數字:

      [[email protected] ~]# echo mem_{1..5}

      mem_1 mem_2 mem_3 mem_4 mem_5

    2. 連續字母:

      [[email protected] ~]# echo mem_{a..z}

      mem_a mem_b mem_c mem_d mem_e mem_f mem_g mem_h mem_i mem_j mem_k mem_l mem_m mem_n mem_o mem_p mem_q mem_r mem_s mem_t mem_u mem_v mem_w mem_x mem_y mem_z


第8章:從shell眼中看世界/8.5 echo:花括號展開/8.5.3 建立連續資料夾舉例

  1. [[email protected] wys]# mkdir {2017..2019}-0{1..9} {2017..2019}-{10..12}

    [[email protected] wys]# ls

    2017-01  2017-03  2017-05  2017-07  2017-09  2017-11  2018-01  2018-03  2018-05  2018-07  2018-09  2018-11  2019-01  2019-03  2019-05  2019-07  2019-09  2019-11

    2017-02  2017-04  2017-06  2017-08  2017-10  2017-12  2018-02  2018-04  2018-06  2018-08  2018-10  2018-12  2019-02  2019-04  2019-06  2019-08  2019-10  2019-12

    [[email protected] wys]#


第8章:從shell眼中看世界/8.6 echo:變數名展開

  1. 展開原則:按 $變數名 格式展開
  2. 舉例:

    [[email protected] ~]# echo $USER

    root


第8章:從shell眼中看世界/8.7 echo:命令展開

  1. 展開原則:按 $(命令)展開
  2. 舉例:
    1. [[email protected] ~]# echo $(ls)

      err-output.txt ln_123 ls-output.txt ls.txt me mycat mycat2.txt mylog mysql.tar.gz q s_ln_123 s_ln_dir test.txt wys wys_bak

    2. [[email protected] ~]# file $(ls /usr/bin/* | grep zipnote)

      /usr/bin/zipnote: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=750c11ada0bec740fa2885383e678e7be5206cdd, stripped


第8章:從shell眼中看世界/8.8 echo:引號展開/8.8.1 雙引號禁用部分展開

  1. 展開原則:在雙引號內的內容,除了以下情況依然會展開外,其它的資訊都按原輸入內容顯示,不進行分割( 第8章:從shell眼中看世界/8.0 echo:單詞分割機制),仍然會展開的情形如下:
    1. 第8章:從shell眼中看世界/8.4 echo:算術表示式展開
    2. 第8章:從shell眼中看世界/8.6 echo:變數名展開
    3. 第8章:從shell眼中看世界/8.7 echo:命令展開
  2. 舉例:
    1. 不展開

      [[email protected] ~]# echo "test a         b * ~"

      test a         b * ~

    2. 按算術展開

      [[email protected] ~]# echo "* ~ $((2+2))"

      * ~ 4

    3. 按變數名展開

      [[email protected] ~]# echo "* ~ $USER"

      * ~ root

    4. 按命令展開

      [[email protected] ~]# echo "* ~ $(ls)"

      * ~ err-output.txt

      ln_123

      ls-output.txt

      ls.txt

      me

      mycat

      mycat2.txt

      mylog

      mysql.tar.gz

      q

      s_ln_123

    5. 不加雙引號的展開:結果按換行符進行展開了

      [[email protected] ~]# echo $(cal)

      August 2018 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

    6. 雙引號的展開:結果按原來結果輸出

      [[email protected] ~]# echo "$(cal)"

           August 2018   

      Su Mo Tu We Th Fr Sa

                1  2  3  4

       5  6  7  8  9 10 11

      12 13 14 15 16 17 18

      19 20 21 22 23 24 25

      26 27 28 29 30 31


第8章:從shell眼中看世界/8.8 echo:引號展開/8.8.2 單引號禁用所有展開

  1. 展開原則:單引號內部的所有內容都不能展開
  2. 舉例:
    1. [[email protected] ~]# echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'

      text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER


第8章:從shell眼中看世界/8.9 echo:轉義字元/8.9.1 雙引號中使用轉義字元

  1. 對於特殊符號前面加\,使其不進行特殊處理,特殊符號比如:$、’
  2. 舉例:
    1. 不加轉移符會輸出空,因為$1中的1不是變數

      [[email protected] ~]# echo "we give you $100"

      we give you 00

    2. 加了轉移符後顯示正常

      [[email protected] ~]# echo "we give you \$100"

      we give you $100


第8章:從shell眼中看世界/8.9 echo:轉義字元/8.9.2 單引號中使用轉義字元

  1. 注意:單引號內所有展開或者轉義都失效
  2. 舉例:

    [[email protected] ~]# echo 'we give you \$100'

    we give you \$100


第8章:從shell眼中看世界/8.9 echo:轉義字元/8.9.3 轉義序列

  1. 概念:由\和指定字元組成
  2. 轉義序列包括:
    1. \a: 響鈴(”警告”-導致計算機嘟嘟響) |
    2. \b:  退格符 |
    3. \n: 新的一行。在類 Unix 系統中,產生換行。 |
    4. \r : 回車符 |
    5. \t: 製表符 |
  3. 使用轉義序列:用 echo -e 解釋轉義序列,舉例:

    [[email protected] ~]# sleep 10; echo -e "Time's up\t"

    Time's up