您的位置:首页 > 运维架构 > Shell

学习Bash 参数和参数扩展

2013-08-23 11:23 232 查看
推荐学习IBM developerWorks的这篇文章 http://www.ibm.com/developerworks/cn/linux/l-bash-parameters.html

现做如下总结:

(1). 传递参数
$0,$1,$2.......$N :都是位置参数,其中$0可以表示为脚本名称(若在函数中调用则表示函数名称)。
$* 和 $@ : 都表示除$0外的所有参数,两者在不用双引号包含时是1、一样的,也就是$*和$@是等价的,使用在双引号中扩展则不同,$*表示所有参数都作为1个单词,且受IFS特殊变量的影响(即所有参数由IFS进行分割连接),而$@把
每个参数都扩展为1个单词即"$@"等价于"$1" "$2" ..."$N".
$# :表示参数数量(不含$0)
注:Shell 脚本处理参数的方式与函数处理参数的方式相同。

(2).获取参数的子集(子字符串)

一般形式: ${参数名称:开始位置:长度}

注:开始位置和长度为整数,且从0开始
实例: x="hello world";
echo ${x:6:5} #输出world
(3).获取变量值的长度
一般形式:${#变量名称}
实例: x="hello world";
echo ${#x} #输出11
(4).模式匹配(可以使用通配符)
[1].从左开始删除:

${变量名#要删除的字} #表示从左边开始删除最短的匹配要删除的字
${变量名##要删除的字} #表示从左边开始删除最长的匹配要删除的字
实例: x="a1e b1e c2 d3 e4"
echo ${x#*1} #则将a1删除,输出为 e b1e c2 d3 e4

echo ${x##*1} #则删除a1e b1,输出为e c2 d3 e4
[2].从右开始删除
${变量名%要删除的字} #表示从右边开始删除最短的匹配要删除的字
${变量名%%要删除的字} #表示从右边开始删除最长的匹配要删除的字
实例: x="a1e b1e c2 d3 e4"
echo ${x%1*} #则删除1e c2 d3 e4,输出为a1e b
echo ${x%%1*}#则删除1e b1e c2 d3 e4,输出为a
[3].替换字符
${变量名/要替换的字/新字} #将变量值中指定的字替换为新字,只做1次替换
${变量名//要替换的字/新字} #将变量值中指定的字替换为新字,做所有替换
实例: x="a1e b1e c2 d3 e4"
echo ${x/1/one} #输出aonee b1e c2 d3 e4
echo ${x//1/one}#输出为aonee bonee c2 d3 e4
(5).设置默认值
${变量名:-默认值} 若指定的变量为空或者没有设置,则shell扩展默认值并替换结果,但是指定变量名的值没有更改。
例如: a=${b:-Val1} #则变量$a的值为Val1而变量b还是没有设置
${变量名:+默认值} 若指定的变量值设置且不为空则shell扩展默认值并替换结果,但是指定的变量值没有改变。
例如: b='val1'; a=${b:+val2} #则$a值为val2而$b值为val1
${变量名:=默认值} 若指定的变量为空或者没有设置,则shell扩展默认值并替换结果,且指定变量名的值也更改为默认值。
实例: a=${b:=val1} #则$a为val1且$b为val1
${变量名:?默认值} 若指定的变量为空或者没有设置,则shell扩展默认值并将结果写入标准错误中。可用于判断变量b是否为空,若为空则错误输出指定的信息。
实例:a=${b:?} #则shell中错误输出-bash: b: error

本文出自 “黄彦东” 博客,请务必保留此出处http://huangyandong.blog.51cto.com/1396940/1281327
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: