shell 及环境变量 -1.4 其他

2016年1月4日 10:05:04

shell 及环境变量 -1.4 其他

参数置换

shell提供了参数置换能力以便用户可以根据不同的条件来给变量赋不同的值。参数置换的变量有四种,这些变量通常与某一个位置参数相联系,根据指定的位置参数是否已经设置类决定变量的取值,它们的语法和功能分别如下。

  • 变量=${参数-word}:如果设置了参数,则用参数的值置换变量的值,否则用 word 置换。即这种变量的值等于某一个参数的值,如果该参数没有设置,则变量就等于 word 的值。
  • 变量=${参数=word}:如果设置了参数,则用参数的值置换变量的值,否则把变量设置成 word 然后再用 word 替换参数的值。注意,位置参数不能用于这种方式,因为在 shell 程序中不能为位置参数赋值。
  • 变量=${参数?word}:如果设置了参数,则用参数的值置换变量的值,否则就显示 word 并从 shell 中退出,如果省略了 word,则显示标准信息。这种变量要求一定等于某一个参数的值,如果该参数没有设置,就显示一个信息,然后退出,因此这种方式常用于出错指示。
  • 变量=${参数+word}:如果设置了参数,则用 word 置换变量,否则不进行置换。

所有这四种形式中的“参数”既可以是位置参数,也可以是另一个变量,只是用位置参数的情况比较多。

测试变量是否已经设置

有时要测试是否已设置或初始化变量。如果未设置或初始化,就可以使用另一值。此命令格式为:$ {variable:-value}。意即如果设置了变量值,则使用它,如果未设置,则取新值。例如:

例子

上面的例子并没有将实际值传给变量,需使用下述命令完成此功能:$ {variable:=value}

设置只读变量

如果设置变量时,不想再改变其值,可以将之设置为只读方式。如果有人包括用户本人想要改变它,则返回错误信息。格式如下:

1
2
variable-name=value
readonly variable-name

设为只读后,任何改变其值的操作将返回错误信息。要查看所有只读变量,使用命令readonly即可。

以下两小节中提到的位置变量、预定义变量是系统保留的只读变量。

*位置变量

如果要向一个shell脚本传递信息,可以使用位置参数完成此功能。参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制(以后将讲到shift命令)。参数从第一个开始,在第9个结束;每个访问参数前要加$符号。第一个参数为0,表示预留保存实际脚本名字。无论脚本是否有参数,此值均可用。

如果向脚本传送 “Did You See Th e Full Moon” 信息,下面的表格讲解了如何访问每一个参数。

$0 $1 $2 $3 $4 $5 $6 $7 $8 $9
脚本名称 Did You See The Full Moon

*预定义变量

  • $# 传递到脚本的参数个数
  • $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过 9 个
  • $$ 脚本运行的当前进程 ID 号
  • $! 后台运行的最后一个进程的进程 ID 号
  • $@ $# 相同,但是使用时加引号,并在引号中返回每个参数
  • $- 显示 shell 使用的当前选项,与 set 命令功能相同
  • $? 显示最后命令的退出状态。0 表示没有错误,其他任何值表明有错误。

shell 的简单语法

这个暂时还用不到,所以简单罗列以下资源: