1. <output id="u9ed5"><optgroup id="u9ed5"></optgroup></output>
    <i id="u9ed5"><thead id="u9ed5"></thead></i>
  • <code id="u9ed5"></code>
    <i id="u9ed5"></i><b id="u9ed5"><sub id="u9ed5"><pre id="u9ed5"></pre></sub></b>

    IT系統集成商

    系統集成 | 虛擬化應用 | 群暉網絡存儲 | 視頻會議 | 數據防泄密 | 技術運維

    手機: 130-1534-6247   電話: 0351-2396570

    bash、shell、正則表達式

    為什么要將Bash、shell、正則表達式三個部分的內容放在一起?在學習中體會到上述三部分的部分語法(表達式)特別容易混淆,所以放在一起作個總結。

    1. 變量賦值

        格式:變量名=變量值
        等號兩邊不能有空格符。
    1. 變量值中有空格可以使用雙引號“”或者單引號‘’括起來,雙引號內的$保留原有特性(雙如var="lang is $LANG" ,將在取得$LANG的內容后賦予變量var);單引號內的內容視為一般字符。
    2. 需要通過命令提供信息的,可以使用$(命令)或者`命令`的方式,比如var=$(uname -r)
    3. 兩個字符串可以直接連接,比如:name="Welcome to " ;name="$name"linux;結果namer的值為“Welcome to linux”
    4. 變量類型默認為字符串,所以sum=100+30 ;sum的值是字符串"100=30"  ;而不是數字130 ;
    5. 推薦使用 declare  [-air]  變量名  的方式明確聲明變量。

    ​​​​2. 變量取值

    1. 兩種方式:$變量名   或者    ${變量名}
    2. 數組元素取值  ${數組元素名}

    3. 變量內容刪除、替換

    1. 設變量:var=http://www.aaa.com/123.htm
    2. #從左邊開始刪除,第一次遇到(符合條件最短的)
      • echo ${var#*//}
      • 即刪除http://
    3. ​##從左邊刪除,最后遇到的(符合條件最長的)
      • echo ${var##*/}
      • 即刪除http://www.aaa.com/
    4. %從右邊刪除,第一次遇到的
      • echo ${var%/*}
      • 即刪除/123.htm
    5. %%從右邊刪除,最后一次遇到的
      • echo ${var%%/*}
      • 即刪除//www.aaa.com/123.htm ;結果為:"http:"
    6. ${變量名/舊字符串/新字符串} 第一個“舊字符串”會被替換為“新字符串”
    7. ${變量名//舊字符串/新字符串} 全部“舊字符串”會被替換為“新字符串”

    4. 變量內容的測試與替換

    1. 類似于 var=${str-expr} ;var=${str:-expr}等等。“Oh,My god!” ,“記不住”,所以還是用后面的[條件]與if語名吧。

    5. login shell 讀取流程

    1. login shell讀取流程

    6. 使用source或者小數點 . 都可以將配置文件的內容讀進當前的shell環境,而不需要注銷。

    7. bash中的通配符

    1. 通配符

    8. 數據重定向

    1. 標準輸入(stdin):代碼為0,使用<或者<<;
    2. 標準輸出(stdout):代碼為1,使用>或者>>;
    3. 標準錯誤輸出(stderr):代碼為2,使用2>或者2>>(注意,明確寫出數字2)。
    4. /dev/null設備,輸出到此設備,所有的信息都被丟棄了。
    5. 將標準輸出、錯誤輸出寫入同一個文件:
      • find / -name .bashrc >list 2>&1   或者(此處的&1可以理解為對標準輸出的引用)
      • find / -name .bashrc &>list
    6. 經常會用前一個命令的stdout作為這次的stdin,某些命令要用文件名,該stdin與stdout可以利用減號-替代:
      • tar -cvf - /home | tar -xvf -
    7. 如果某命令如cat沒有文件名參數,或者當參數是-時,則從stdin讀取。
      • cat >catfile <~/.bashrc
      • cat >catfile <<"eof"

    9. 管道

    1. 管道僅能處理前一個命令的stdout,對stderr沒有處理能力。
    2. 每個管理后面的第一個數據必定是“命令”
    3. 雙向重定向tee(同時輸出自文件與屏幕):cat ~/.bashrc | tee catfile | more 

    10. 選取命令cut 

    1. 以行為單位,進行數據提取
    2. cut  -d  '分隔字符'  -f 字段列表,如 echo $PATH | cut -d ":" -f 3,5  (以:為分隔符進行字段劃分,取出第3、第5個字段)
    3. cut -c 字符起始范圍,如 export | cut -c 12-       或者   12-20

    11. 排序命令sort、uniq

    1. sort [-rntk] [file or stdin]
      • -n 使用數字進行排序
      • -r 反向排序
      • -t 指定分隔符,
      • -k 行被分隔符分成若干個字段后,用哪個字段進行排序
      • cat /etc/passwd | sort -t ‘:’ -k 3
    2. uniq重復行僅列出一個,如last | cut -d "  " | sort | uniq 

    12. 刪除與替換命令tr(不改變文件本身內容)

    1. 將輸出的信息中的小寫字母變成大寫字母:last | tr '[a-z]'  '[A-Z]'

    13. xargs命令

    1. 由于很多命令不支持管道來傳遞參數,所以xargs命令就派上了用場。它擅長將標準輸入數據轉換成命令行參數,xargs能夠處理管道或者stdin并將其轉換成特定命令的命令參數。如:將/etc/passwd內的第一列取出,僅取三行,并用finger將每個帳號的信息顯示出來
    2. cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs finger
    3. find /sbin -perm +7000 | xargs ls-l (ls不支持管道)