- 论坛徽章:
- 0
|
关于第3节变量替换的部分,一开始看的时候没看懂,网上找了下资料,贴在这里给有需要的朋友看看
变量替换
变量替换可使shell程序员根据变量的值去操作。变量替换分成两类:
1、当变量有值时去发生动作
2、当变量没有值时去发生动作
动作的范围从一次值替换到退出脚本。
这些分类可以把分成四种形式的变量替换。下面列出全部变量替换的方法:
${parameter:-word} 如果parameter是空或者没有设置,word替换parameter。parameter的值不会发变化。
${parameter:=word} 如果parameter是空或者没有设置,parameter被设置成word的值。
${parametermessage}如果parameter是空或者没有设置,messeage是被打印到屏幕上错误信息。它检查这个变量是否被设置正确。
${parameter:+word} 如果parameter是被设置,word替换parameter。parameter的值不会发变化。
用一个默认的值替换
第一种形式当一个变量没有设值时或者空时,可以用一个默认的值代替。如下简单的例子:
PS1=${HOST:-localhost}"$ " ; export PS1 ;
你可以使用这种方法在用户的.profile中确保他的提示符总是正确的。这种形式的变量替换不影响变量的值。它执行替换动作仅仅当变量没有设值时。
分配一个默认的值
去设置变量的值,第二种形式的变量必须被用到。如下例:
PS1=${HOST:='uname -n'}"$ " ; export PS1 HOST ;
执行完上面的命令后,PS1和HOST都被设值。这个例子也说明实事上默认的字串不必是先设置好的,也可以通过命令去设定。如果这个替换在shell中不存在。
那就只能用下面的行去执行达到同样的效果:
if [ -z "$HOST" ] ; then HOST='uname –n' ; fi ; PS1="$HOST$ ";export PS1 HOST ;
可以看到,变量替换比上面的描述更短,更清楚。
由于变量错误的异常退出
有时替换默认值能隐藏问题,像sh支持第三种形式的变量替换,可以使系统输出错误信息到屏幕上面当变量没有设置的时候。
一个常用的地方是在脚本中,shell的函数要求一些变量被设置成正确的值后才被正确执行。如下例:
${HOME"Your home directory is undefined."}
最后一种变量替换是当变量被设置时。
这种形式不改变变量的值,它仅仅改变要替换成的内容。最常用的是当一个脚正在运行在DEBUG模式。
echo ${DEBUG:+"Debug is active."}
命令和数学运算替换
分为:
命令替换
数学运算替换
命令替换是一种方式,shell执行一个被给定的命令,然后在执行命令的地方输出结果。当命令如下面的形式时命令替换执行。
`command`
命令替换的主要用途是分配一个命令的输出给一个变量的值。如下:
DATE=`date`
USERS=`who | wc –l`
UP=`date ; uptime`
在第一个例子中date的输出赋给变量DATE,第二个例子wc | wc -l执行的结果送给USERS变量当值。最后一个例子的输出也成为了UP的值。
你也可以用命令替换作为其它命令的参数如下:
grep `id –un` /etc/passwd
数学运算替换
在ksh和bash中它们提供expr或者bc去做数学运算在shell脚本中。这些特性在sh中不提供。
但是可以用如下形式:
$((expression))
expression是根据标准的数学约定的,操作符有+,-,*,/,()。
如下例;
foo=$(( ((5 + 3*2) - 4) / 2 ))
最后foo的结果是3。 |
|