真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

shell腳本及正則表達(dá)式-創(chuàng)新互聯(lián)

shell腳本的編寫及正則表達(dá)式:

在平羅等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需定制,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營(yíng)銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),平羅網(wǎng)站建設(shè)費(fèi)用合理。

  一、shell腳本的基本:

  1.首先shell腳本到底是什么?

    1)純文本文檔--文件中所存儲(chǔ)的數(shù)據(jù)都是以字符為單位進(jìn)行存儲(chǔ)的;

    2)根據(jù)用戶的需求來(lái)解決用戶問(wèn)題的大量命令的組合體

    3)“執(zhí)行冪等性”——任何命令多次執(zhí)行的結(jié)果是一致的

       注意:很多命令都不具備“執(zhí)行冪等性”,在shell腳本中就需要大量的程序邏輯來(lái)判斷某個(gè)命令是否滿足其運(yùn)行條件,以避免在運(yùn)行過(guò)程中出現(xiàn)嚴(yán)重錯(cuò)誤。

  2.腳本的基本代碼內(nèi)容:

    1)首先我們可以利用文本編輯工具來(lái)編寫shell腳本:

       例如:Nano 、vi、Vim、emacs、pico

      在這里我們推薦使用Vim,因?yàn)樗哂姓Z(yǔ)法著色,自動(dòng)縮進(jìn)等特性

    腳本的命令方式:可以使用.sh的文件名為后綴;在低版本的Vim編輯器,只能根據(jù).sh的后綴命令來(lái)識(shí)別是否為shell腳本,高版本的Vim編輯器,則無(wú)需過(guò)多的文件后綴名的問(wèn)題;

    2)shebang:首行必須是shebang,解釋器路徑,必須占據(jù)就對(duì)行首:在執(zhí)行時(shí),啟動(dòng)相應(yīng)的解釋器以解釋腳本內(nèi)諸多的命令

     因?yàn)槲覀兪褂玫膕hell為bash

     #! /bin/bash

    3) 在shell腳本中,除了shebang之外,所有以#開頭的行都為注釋行,解釋器都會(huì)忽略這樣的行的內(nèi)容

  例如:

     # author:秦耀東

     # type:基礎(chǔ)練習(xí)

     ...

   4)空白行:解釋器會(huì)忽略腳本中所有的空白行;

   5)大量的關(guān)鍵字和命令:if、else、then、do、while、for、...

   6) bash中所有的特殊想字符

 /// 注意:shell腳本一旦運(yùn)行,是在當(dāng)前的shell中根據(jù)shebang的指示,開啟一個(gè)解釋器(子shell)解釋執(zhí)行代碼內(nèi)容,shell腳本的內(nèi)容是在一個(gè)子shell進(jìn)程中實(shí)現(xiàn)的;

  3.腳本的運(yùn)行方法:

    1)為腳本文件賦予執(zhí)行權(quán)限,直接運(yùn)行此文件:

     ~ ]#  chmod  +x /PATH/TO/SCRIPT_FILE

     注意:如果在執(zhí)行腳本時(shí),只寫腳本的名不寫路徑的話,必須確保PATH變量中保存的路徑下,能夠找到該文件;

    2)直接使用解釋器運(yùn)行腳本,講腳本作為解釋器命令的參數(shù);

      bash /PATH/TO/SCRIPT_FILE

      bash -x /PATH/TO/SCRIPT_FILE(將腳本的運(yùn)行過(guò)程展示出來(lái),一般用于腳本排錯(cuò))

      bash -n /PATH/TO/SCRIPT_FILE(對(duì)腳本進(jìn)行語(yǔ)法排錯(cuò),如果存在語(yǔ)法錯(cuò)誤,則 bash會(huì)給予提示,針對(duì)于這類錯(cuò)誤提示,,需要我們自行判斷錯(cuò)誤的發(fā)生位置)

 二、正則表達(dá)式:

在學(xué)習(xí)正則表達(dá)式之前我們先來(lái)學(xué)習(xí)文本處理工具:

文本處理三劍客:

grep系:grep、egrep、fgrep,文本搜索工具,基于"PATTERN"對(duì)于給定的文本進(jìn)行模糊搜索,grep系默認(rèn)工作于貪婪模式下;

sed:Stream EDitor,流編輯器,行編輯器,文本編輯工具;

awk:gawk——GNU awk,文本格式化工具,文本報(bào)告生成器,文本處理的編程語(yǔ)言;

 1.grep系:grep  egrep  fgrep

   1:grep:默認(rèn)僅支持基本正則表達(dá)式

    全稱為Global search Regular Expression and Print out the line.利用正則表達(dá)式進(jìn)行全局搜索并將匹配的行顯示出來(lái);

    1)grep [OPTIONS] PATTERN [FILE...]

     ////這里我們要介紹一下PATTERN,PATTERN是一種過(guò)濾條件,是由正則表達(dá)式元字符以及沒(méi)有特殊含義的文本字符組成;

      正則表達(dá)式的元字符會(huì)被正則表達(dá)式引擎解釋為特殊含義;

      正則表達(dá)式的文本字符是指只具備字符表面含義的字符;

    常用選項(xiàng)為:

    -i, --ignore-case:忽略文本字符的大小寫;

     -v, --invert-match:反向匹配;最終顯示的結(jié)果是PATTERN不能成功匹配的行;

     -c, --count:計(jì)數(shù),統(tǒng)計(jì)匹配PATTERN的所有的行數(shù);

    -o, --only-matching:關(guān)閉貪婪模式,僅顯示PATTERN能夠匹配的內(nèi)容;

     -q, --quiet, --silent:安靜模式,不輸出任何匹配結(jié)果;

    --color[=WHEN], --colour[=WHEN]:將匹配PATTERN的內(nèi)容以特殊顏色高亮顯示;

  --color=auto

    -E, --extended-regexp:擴(kuò)展的正則表達(dá)式,grep -E相當(dāng)于egrep;

     -F, --fixed-strings, --fixed-regexp:grep -F相當(dāng)于fgrep

     -G, --basic-regexp:基本的正則表達(dá)式,egrep -G相當(dāng)于grep

     -P, --perl-regexp:使用PCRE(Perl Common Regular Expression)引擎;

    -A NUM, --after-context=NUM:在顯示匹配PATTERN的行的同時(shí)顯示其后面的NUM行;

    -B NUM, --before-context=NUM:在顯示匹配PATTERN的行的同時(shí)顯示其前面的NUM行;

    -C NUM, -NUM, --context=NUM:在顯示匹配PATTERN的行的同時(shí)顯示其前后各NUM行;

   基本的正則表達(dá)式的元字符:

    1) 字符匹配;

      . :匹配任意單個(gè)字符;

      []:匹配指定范圍內(nèi)的任意單個(gè)字符;

     [^]:匹配指定范圍以外的任意單個(gè)字符;

  下列所有的字符集都可以放置于[]之中用于匹配單個(gè)字符;

  [:lower:]:所有小寫的單個(gè)字符

  [:upper:]:所有大寫的字母

   [:alpha:]:所有字母字符

   [:digit:]:所有的十進(jìn)制數(shù)字

  [:space:]:所有的空白字符

  [:alnum:]:表示所有的大小寫字母以及十進(jìn)制數(shù)字

  [:punct:]:所有的標(biāo)點(diǎn)符號(hào)

   [:xdigit:]:所有的十六進(jìn)制數(shù)字;

  a-z:所有的小寫字母

  A-Z:所有的大寫字母

  0-9:標(biāo)識(shí)所有的十進(jìn)制數(shù)字

    2)次數(shù)匹配

      *:其前面的字符可以出現(xiàn)任意次(0次,1次或多次);

      \?:其前面的字符可有可無(wú)(0次或1次);

      \+:其前面的字符至少出現(xiàn)一次(1次或多次);

      \{m\}:其前面的字符必須出現(xiàn)m次;

      \{m,n\}:其前面的字符至少出現(xiàn)m次,至多出現(xiàn)n次;(m

      \{,n\}:其前面的字符至少出現(xiàn)0次,至多出現(xiàn)n次;

      \{m,\}:其前面的字符至少出現(xiàn)m次,×××;

 在正則表達(dá)式中,表示任意長(zhǎng)度任意字符的方式:.*

 位置錨定字符:

  行錨定:

  行首錨定:^

  行尾錨定:$

  字錨定:

  字首錨定:\<或\b

  字尾錨定:\>或\b

  \b:舊版本中的錨定方法,建議不使用;

 對(duì)于正則表達(dá)式引擎來(lái)說(shuō),字是由非特殊字符組成的連續(xù)字符串;

 分組與引用字符:

 \(PATTERN\):將此PATTERN所匹配到的所有字符當(dāng)作一個(gè)不可分割的整體來(lái)處理

 在正則表達(dá)式引擎之中,有一系列的內(nèi)置變量,這些變量會(huì)保存所有分組內(nèi)的字符信息,用于后向引用;這些變量依次是:\1, \2, \3, ...

  pattern1\(pattern2\)pattern3\(pattern4\(pattern5\)\)

  \1:pattern2

  \2:pattern4

   \3:pattern5

       \1:第一組小括號(hào)中的pattern匹配到的字符;

    \2:第二組小括號(hào)中的pattern匹配到的字符;

    ...

  ///// 例:請(qǐng)找出在/etc/passwd中用戶的UID和GID相同的用戶賬戶;

  ~]# grep '\(\<[[:digit:]]\+\>\).*\1' /etc/passwd

  或:\|

        注意:\|將其左右兩邊的字符串當(dāng)作整體對(duì)待;

        A\|american  :A或american

        請(qǐng)找出ifconfig命令的執(zhí)行結(jié)果中數(shù)值在100-255之間的整數(shù);

           第一位:1 2

  第二位:0-90-4  5

  第三位:0-90-9  0-5

  ifconfig | grep '\<\(1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)\>'

      請(qǐng)找出ifconfig命令的執(zhí)行結(jié)果中數(shù)值在0-255之間的整數(shù);

   2.grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

    默認(rèn)情況下,grep命令后面只允許有一個(gè)PATTERN;

    如果想要在一次grep所搜過(guò)程中寫多個(gè)PATTERN,則需要使用-e選項(xiàng);每個(gè)-e選項(xiàng)只能使用一個(gè)PATTERN作為參數(shù);

     將所需要的PATTERN寫入到一個(gè)文件中,保證每行只有一個(gè)PATTERN;我們就可以使用-f FILE方式來(lái)實(shí)現(xiàn)多PATTERN匹配;

   egrep:

    egrep [OPTIONS] PATTERN [FILE...]

     擴(kuò)展的正則表達(dá)式元字符:

   1) 字符匹配;

      . :匹配任意單個(gè)字符;

      []:匹配指定范圍內(nèi)的任意單個(gè)字符;

      [^]:匹配指定范圍以外的任意單個(gè)字符;

    下列所有的字符集都可以放置于[]之中用于匹配單個(gè)字符;

      [:lower:]:所有小寫的單個(gè)字符

      [:upper:]:所有大寫的字母

      [:alpha:]:所有字母字符

      [:digit:]:所有的十進(jìn)制數(shù)字

      [:space:]:所有的空白字符

      [:alnum:]:表示所有的大小寫字母以及十進(jìn)制數(shù)字

      [:punct:]:所有的標(biāo)點(diǎn)符號(hào)

      [:xdigit:]:所有的十六進(jìn)制數(shù)字;

      a-z:所有的小寫字母

      A-Z:所有的大寫字母

      0-9:標(biāo)識(shí)所有的十進(jìn)制數(shù)字

    2)次數(shù)匹配

      *:其前面的字符可以出現(xiàn)任意次(0次,1次或多次);

      \?:其前面的字符可有可無(wú)(0次或1次);

      \+:其前面的字符至少出現(xiàn)一次(1次或多次);

      \{m\}:其前面的字符必須出現(xiàn)m次;

      \{m,n\}:其前面的字符至少出現(xiàn)m次,至多出現(xiàn)n次;(m

      \{,n\}:其前面的字符至少出現(xiàn)0次,至多出現(xiàn)n次;

      \{m,\}:其前面的字符至少出現(xiàn)m次,×××;

   在正則表達(dá)式中,表示任意長(zhǎng)度任意字符的方式:.*

   位置錨定字符:

   行錨定:

   行首錨定:^

   行尾錨定:$

   字錨定:

   字首錨定:\<或\b

   字尾錨定:\>或\b

    分組與引用字符:

   \(PATTERN\):將此PATTERN所匹配到的所有字符當(dāng)作一個(gè)不可分割的整體來(lái)處理

  在正則表達(dá)式引擎之中,有一系列的內(nèi)置變量,這些變量會(huì)保存所有分組內(nèi)的字符信息,     用于后向引用;這些變量依次是:\1, \2, \3, ...

   pattern1\(pattern2\)pattern3\(pattern4\(pattern5\)\)

   \1:pattern2

   \2:pattern4

   \3:pattern5

       \1:第一組小括號(hào)中的pattern匹配到的字符;

     \2:第二組小括號(hào)中的pattern匹配到的字符;

     ...

  ///// 例:請(qǐng)找出在/etc/passwd中用戶的UID和GID相同的用戶賬戶;

   ~]# grep '\(\<[[:digit:]]\+\>\).*\1' /etc/passwd

   或:\|

        注意:\|將其左右兩邊的字符串當(dāng)作整體對(duì)待;

        A\|american  :A或american

  fgrep:PATTERN中所有的字符都被當(dāng)作文本字符來(lái)處理;

 其他的文本處理命令:

 wc:

 wc [OPTION]... [FILE]...

 -l:只顯示行數(shù)

 -w:只顯示字?jǐn)?shù)

 -c:只顯示字符數(shù)

 cut:remove sections from each line of files

 能夠被cut命令修剪的文件,一般都是具有一定結(jié)構(gòu)或格式的文本文檔;/etc/passwd

 cut OPTION... [FILE]...

 -d, --delimiter=DELIM:指定在實(shí)施修剪操作時(shí)所依賴的分隔符,默認(rèn)是空白字符;

 -f, --fields=LIST:根據(jù)定義的分隔符來(lái)指定字段的編號(hào);

 地址定界使用方法:

 #:選擇被指定的單個(gè)字段;

 #,#:離散的多個(gè)被指定的單個(gè)字段;

 #-#:連續(xù)的多個(gè)被指定的字段;

 --output-delimiter=STRING:指定輸出分隔符;

 awk:

 awk -F "DELIMITER" '[/PATTERN/]{print $1,$2,...$NF}' FILE...

 -F "DELIMITER":指定字段分隔符,默認(rèn)為空白字符;

 $1,$2,...,$NF:根據(jù)字段分隔符切割出來(lái)的文本片段都存放在相應(yīng)的內(nèi)部變量中;

 sort:sort lines of text files,將文本文件按行繼續(xù)排序,默認(rèn)排序規(guī)則是按照ASCII表中的字符順序進(jìn)行,這個(gè)排序標(biāo)準(zhǔn)可修改;

 -r, --reverse:逆序排序

 -R, --random-sort:隨機(jī)排序,這種隨機(jī)算法是非常簡(jiǎn)陋的,不適用于復(fù)雜環(huán)境;

 -u, --unique:重復(fù)出現(xiàn)的行,只保留一行;(連續(xù)且完全相同的行叫重復(fù)),祛重;

 -n, --numeric-sort:以數(shù)字的數(shù)值大小進(jìn)行排序;

 -t, --field-separator=SEP:指定字段分隔符;

 -k, --key=KEYDEF:指明根據(jù)哪個(gè)關(guān)鍵字段進(jìn)行排序,一般和-t同時(shí)使用;

 uniq:report or omit repeated lines

 -d, --repeated:只顯示重復(fù)出現(xiàn)的行,而且每一組重復(fù)行只顯示一行;

 -u, --unique:只顯示不重復(fù)的行;

 -c, --count:在每行以前綴的方式顯示重復(fù)行的重復(fù)次數(shù);

 diff:compare files line by line

 同一文件的不同修改版本;打補(bǔ)??;

 patch:apply changes to files

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


當(dāng)前名稱:shell腳本及正則表達(dá)式-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://weahome.cn/article/ghhii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部