歡迎您光臨本站 註冊首頁

Linux shell編程(二)高級變數

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

高級變數,有3個主題:

(1)變數擴展 ${變數名稱} $(filename)

(2)命令替換 ${命令} $(ls /)

(3)算術擴展 $((算術式)) $((9 9))

1. 測試變數“存在於否”的基本用法

語法:${待測變數-默認值}

用例:

unset myname

r=${myname-'basher'}

echo $r

結果為:basher

2. 測試變數“不存在”或其值為空:“傳回”一個默認值

語法:${待測變數:-默認值}

用例:

myname=

r=${myname:-'basher'}

echo $r

結果為:basher

特殊運用法

[ -n ${DEBUG:-} ] && set -v

[ ]是測試條件的語法,其中-n是用來測試後接的變數是否有值,若非空,則傳回真值.

${DEBUG:-}就是-n要測試的對象.:-後面原本放置默認值的地方卻沒有任何東西,表示故意要讓默認值為空.

3.測試變數“不存在”或其值為空:給變數設一個默認值

語法:${待測變數:=默認值}

用例:

unset count

r=${count:=100}

echo $count

結果為:100

用例2:

count=500

r=${count:=100}

echo $r

結果為:500

目的:給變數設一個默認值

4.測試變數是否“不存在”或其值為空:提示錯誤信息

語法:${待測變數:?提示信息}

5.測試變數的“存在性”

語法:${待測變數: 真值}

用例:

Iamhappy='feel so good'

r=${Iamhappy: 'true'}

echo $r

結果為:true

目的:用來測試某件事是真的.

6.變數的擴展:取字元串切片,字元串長度

(1)取字元串切片

語法一:${變數:位置起點}

用例:

myname="sheller name"

substr=${myname:4}

結果為:ler name

語法二:${變數:位置起點:長度}

用例:

filename="/etc/apache2"

dir1=${filename:1:3}

echo $dir1

結果為etc

7.計算字元串長度

語法:${#變數名稱}

用例:

filename="/usr/sbin/ntpdate"

echo ${#filename}

結果為:17

8.變數擴展:對比樣式

由字元串前面對比,刪除相符者

語法:${變數#樣式}

用例1:

filename="/usr/sbin/ntpdate"

r=${filename#/*/}

echo $r

結果為:sbin/ntpdate

用例2:

filename="//usr/sbin/ntpdate"

r=${filename#/*/}

echo $r

結果為:usr/sbin/ntpdate

由前面對比,刪最長的

語法:${變數##樣式}

用例:

filename="/usr/sbin/ntpdate"

r=${filename##/*/}

echo $r

結果為:ntpdate

由後面對比,刪最短的

語法:${變數%樣式}

用例:

filename="/usr/sbin/ntpdate"

r=${filename%/*}

echo $r

結果為 /usr/sbin

由後面對比,刪最長的

語法:${變數%%樣式}

用例:

fqdn="www.tnc.edu.cn"

m=${fqdn%%.*}

echo $m

結果為www

總結:#經常放在數字前面表示個數,就記住它是由前面對比.一個#刪最短,兩個#刪最長.

%經常放在數字後面代表百分比,所以看到它,就記著它是由後面對比.一個%刪最短,兩個%%刪最長.

9. 只替換第一個對比符合的字元串

語法:${變數/樣式/替換字元串}

用例:把:換成,

act="mail:x:8:8:mail:/var/mail"

r=${act/:/,}

echo $r

結果為:mail,x:8:8:mail:/var/mail

10. 替換全部對比符合的字元串

語法:${變數//樣式/替換字元串}

把;換成,

act="mail:x:8:8:mail:/var/mail"

r=${act//:/,}

echo r$

結果為:mail,x,8,8,mai,/var/mail

11. 把對比符合的字元串刪除

只刪一個

語法:${變數/樣式/}

用例:把第一個:刪除

act="mail:x:x:8:8:mail:/var/mail"

r=${act/:/}

echo r$

結果為:mailx:x:8:8:mail:/var/mail

刪除全部

語法:${變數//樣式/}

把所有的:刪除

用例:

act="mail:x:8:8:mail:/var/mail"

r=${act//:/}

echo r$

結果為:mailx88mail/var/mail

12.變數擴展:取變數名稱列表、數組索引列表

取變數名稱列表

語法:${!開頭字元串@}或${!開頭字元串*}

用例:

filename="ntpdate"

dir="/usr/sbin"

dir_file="$dir/$filename"

echo ${[email protected]}

結果為:dir dir_file

取數組索引列表

語法:${!數組變數[@]}或{!數組變數[*]}

用例:

ar=(a b c xy z)

r=${!ar[@]}

echo r$

結果為:0 1 2 3 4

用例:

ar=(a b c xy z)

for i in "${!ar[@]}"

do

echo "index $i: ${ar[$i]}"

執行結果為:index 0: a

index 1: b

................

13.命令替換

命令替換的語法是:變數名稱=$(命令)

用例:

DIRS=$(ls)

for f in $DIRS

do

echo $f

done

$DIRS里的文件名,輪替放入$f,然後由行4顯示出來

14.算術擴展

算術擴展的語法:$((算術式))

用例:

I=$((8 16))

echo $I

結果顯示為:24

本文出自 「我的地盤聽我的」 博客,請務必保留此出處http://2614223.blog.51cto.com/2604223/577720


[火星人 ] Linux shell編程(二)高級變數已經有893次圍觀

http://coctec.com/docs/linux/show-post-48481.html