Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1766574
  • 博文数量: 234
  • 博客积分: 4966
  • 博客等级: 上校
  • 技术积分: 3322
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-13 01:03
文章分类

全部博文(234)

文章存档

2017年(2)

2016年(1)

2015年(8)

2014年(11)

2013年(44)

2012年(27)

2011年(22)

2010年(30)

2009年(37)

2008年(6)

2007年(45)

2006年(1)

分类: Python/Ruby

2011-11-27 22:28:54

在bashshell中$符号会触发3种扩展,包括变量扩展,命令替换及算术扩展。其中变量扩展内容最为丰富,本节我们就来具体介绍一下$是如何实现变量扩展的。
 
变量扩展的基本格式是${}.
 
1. 变量扩展:测试存在性及空值
a.测试变量“存在与否与是否为空”的基本语法
${待测变量:-默认值}
意义为:若待测变量不存在或为空值,那么返回一默认值,否则返回待测变量的值。
 
${待测变量:=默认值}
意义为:若待测变量不存在或空值时,给变量赋值为默认值,否则待测变量值维持原状。
 
这里要注意区别返回值与赋值的区别。若变量不存在或为空时,返回值后变量仍为空或不存在,所以这里一般会使用“变量名称=${待测变量:-默认值}”形式;但赋值后变量便有了值。
 
${待测变量:?提示信息}
意义为:若待测变量值为空或不存在时,返回变量名称+提示信息,并立即中断shell脚本的运行,用来防止变量值为空时会对以后的程序运行造成伤害。
 
b.测试变量的存在性
${待测变量:+真值}
意义为:若变量存在且其值非空时,传回“真值”;若不然,传回空值。
 
2.变量扩展:取字符串切片、字符串长度
a.取字符串切片
字符串的第一个字符,编号为0,依次增加1
取字符串切片有两个主要的语法:
语法1:${变量:位置起点}
意义为:由指定的位置开始,截取字符串到字符串结束
语法2:${变量:位置起点:长度}
意义为:由指定的位置开始,截取长度为“长度”的子字符串
 
例如:利用shell程序判断分割字符变量IFS内容包括“空格”,“TAB”及“换行字符”
解: echo "_${IFS:0:1}_"
           echo "_${IFS:1:1}_"
           echo "_${IFS:2:1}_"
输除分别为“空格”,“tab个空格”“换行”
这里之所以用_是因为这些输出都是空白的,用_ _夹住用来查看输出的正确与否。
 
b.计算字符串长度
语法为:${#变量}  :个人这个超级好用,也很简单,关键是要牢记
 
3.变量扩展: 对比样式
a.由字符串前面对比,删除相符者
语法一:${变量#样式}
意义为:从变量前面开始对比,删除与样式相符的最短者
例如:
filename="/usr/sbin/ntpdate"
r=${filename#/*/}
echo $r
输出为:sbin/ntpdate
语法二:${变量##样式}
意义为:由字符串前面对比,删除与样式相符的最长者
例:
r=${filename##/*/}
echo $r
输出为ntpdate
这一命令等同于basename{filename}
 
 
b、由字符串后面对比,删除相符者
同样存在两种语法
语法1.${变量%样式}
意义为:由字符串后面开始对比,删除最短相符者
语法2.${变量%%样式}
意义为:由字符串后面开始对比,删除最长相符者
 
 
c.取代或删除部分字符串
替换第一个符合样式的字符串
语法:${变量/样式/替换字符串}
替换全部符合样式的字符串
语法:${变量//样式/替换字符串}
例如:
act="mail:x:8:8"
r1=${act/:/,}  输出为:mail,x:8:8
r2=${act//:/,} 输出为:mail,x,8,8
若替换字符串为空,则代表把符合样式的删掉
 
4变量扩展:取变量名称列表、数组及索引列表
a.取变量名称列表
语法为:${!开头字符串@}或${!开头字符串*}
意义为:把所有以指定字符串开头的变量名称列出,各变量之间,用$IFS定义的第一个分隔符隔开。
例:
filename="ntpdate"
dir="/usr/sbin"
dir_file="$dir/$filename"
echo ${!dir@}
输出为:dir dir_file
注意这里取的是变量名称的列表,而不是取的变量值
 
b.取数组索引列表
语法为:${!数组变量[@]}或${!数组变量[*]}
例如:
ar={a b c}
r=${!ar[@]}
输出为0 1 2
 
转载自:http://wbwk2005.blog.51cto.com/2215231/441680
阅读(2083) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~