shell指令碼編程之內建字串處理工具

來源:互聯網
上載者:User

標籤:shell指令碼編程 內建字串處理工具

bash的內建字串處理工具:

字串切片:

    ${var:offset:number}

    取字串的子串;

取字串的最右側的幾個字元:${var:  -length}

    注意:冒號後必須有一個空白字元;

基於模式取子串:

    ${var#*word}:其中word是指定的分隔字元;功能:自左而右,尋找var變數所儲存的字串中,第一次出現的word分隔字元,刪除字串開頭至此分隔字元之間的所有字元;

    ${var##*word}:其中word是指定的分隔字元;功能:自左而右,尋找var變數所儲存的字串中,最後一次出現的word分隔字元,刪除字串開頭至此分隔字元之間的所有字元;

    mypath="/etc/init.d/functions"

    ${mypath##*/}:   functions

    ${mypath#*/}:  etc/init.d/functions

    ${var%word*}:其中word是指定的分隔字元;功能:自右而左,尋找var變數所儲存的字串中,第一次出現的word分隔字元,刪除此分隔字元至字串尾部之間的所有字元;

    ${var%%word*}:其中word是指定的分隔字元;功能:自右而左,尋找var變數所儲存的字串中,最後一次出現的word分隔字元,刪除此分隔字元至字串尾部之間的所有字元;

        mypath="/etc/init.d/functions"

    ${mypath%/*}:  /etc/init.d

        url=http://www.magedu.com:80

    ${url##*:}

    ${url%%:*}

尋找替換:

    ${var/PATTERN/SUBSTI}:尋找var所表示的字串中,第一次被PATTERN所匹配到的字串,將其替換為SUBSTI所表示的字串;

    ${var//PATTERN/SUBSTI}:尋找var所表示的字串中,所有被PATTERN所匹配到的字串,並將其全部替換為SUBSTI所表示的字串;

    ${var/#PATTERN/SUBSTI}:尋找var所表示的字串中,行首被PATTERN所匹配到的字串,將其替換為SUBSTI所表示的字串;

    ${var/%PATTERN/SUBSTI}:尋找var所表示的字串中,行尾被PATTERN所匹配到的字串,將其替換為SUBSTI所表示的字串;

注意:PATTERN中使用glob風格和萬用字元;

尋找刪除:

    ${var/PATTERN}:以PATTERN為模式尋找var字串中第一次的匹配,並刪除之;

    ${var//PATERN}

    ${var/#PATTERN}

    ${var/%PATTERN}

字元大小寫轉換:

    ${var^^}:把var中的所有小寫字元轉換為大寫;

    ${var,,}:把var中的所有大寫字元轉換為小寫;

變數賦值:

    ${var:-VALUE}:如果var變數為空白,或未設定,那麼返回VALUE;否則,則返回var變數的值; 

    ${var:=VALUE}:如果var變數為空白,或未設定,那麼返回VALUE,並將VALUE賦值給var變數;否則,則返回var變數的值; 

    ${var:+VALUE}:如果var變數不空,則返回VALUE;

    ${var:?ERROR_INFO}:如果var為空白,或未設定,那麼返回ERROR_INFO為錯誤提示;否則,返回var值; 

寫一個指令碼:

ping命令去查看172.16.1.1-172.16.67.1範圍內的所有主機是否線上;線上的顯示為up, 不線上的顯示down,分別統計線上主機,及不線上主機數;

分別使用for, while迴圈實現。

#!/bin/bash#declare -i uphosts=0declare -i downhosts=0for i in {1..17}; do    if ping -W 1 -c 1 172.16.$i.1 &> /dev/null; then        echo "172.16.$i.1 is up."        let uphosts+=1    else        echo "172.16.$i.1 is down."        let downhosts+=1    fidoneecho "Up hosts: $uphosts, Down hosts: $downhosts."

使用function和while的方式來實現:

#!/bin/bash#declare -i uphosts=0declare -i downhosts=0declare -i i=1hostping() {if ping -W 1 -c 1 $1 &> /dev/null; then    echo "$1 is up."    return 0else    echo "$1 is down."    return 1fi}while [ $i -le 67 ]; do    hostping 172.16.$i.1    [ $? -eq 0 ] && let uphosts++ || let downhosts++    let i++doneecho "Up hosts: $uphosts, Down hosts: $downhosts."

寫一個指令碼,實現:

能探測C類、B類或A類網路中的所有主機是否線上;

#!/bin/bash#cping() {local i=1while [ $i -le 5 ]; do    if ping -W 1 -c 1 $1.$i &> /dev/null; then        echo "$1.$i is up"    else        echo "$1.$i is down."    fi    let i++done}bping() {local j=0while [ $j -le 5 ]; do    cping $1.$j    let j++done}aping() {local x=0while [ $x -le 255 ]; do    bping $1.$x    let x++done}提示使用者輸入一個IP地址或網路地址;擷取其網路,並掃描其網段;


本文出自 “汪立明” 部落格,請務必保留此出處http://afterdawn.blog.51cto.com/7503144/1916084

shell指令碼編程之內建字串處理工具

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.