標籤: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指令碼編程之內建字串處理工具