Chinaunix首页 | 论坛 | 博客
  • 博客访问: 949181
  • 博文数量: 376
  • 博客积分: 154
  • 博客等级: 入伍新兵
  • 技术积分: 1558
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-13 08:42
文章分类

全部博文(376)

文章存档

2014年(11)

2013年(88)

2012年(260)

2011年(17)

分类:

2012-01-07 17:30:51

本文转自:http://2614223.blog.51cto.com/2604223/577720

高级变量,有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=""

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 ${!di@}

结果为: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

阅读(307) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~