1. 用户定义的变量 用户定义的变量是最普通的Shell变量。变量名是以字母或下线符打头的字母、数字和下线符序列,并且大小写字母意义不同。如dir与Dir是不同的变量。这与C语言中标识符的定义相同。变量名的长度不受限制。 定义变量并赋值的一般形式是:变量名=字符串 注意,在赋值语句中,赋值号“=”的两边没有空格,否则在执行时会引起错误。 变量的值可以改变,只须利用赋值语句重新给它赋值即可。一个未明确赋过值的变量仅含一个空字符串。 在程序中使用变量的值时,要在变量名前面加上一个符号“$”。 如果在赋给变量的值中要含有空格、制表符或换行符,那么,就应该用双引号把这个字符串括起来。例如, names="abc dd ff" 可以将一个命令的执行结果赋值给变量。有两种形式的命令替换:一种是使用倒引号引用命令,其一般形式是:`命令表`。 例如:将当前工作目录的全路径名存放到变量dir中,输入以下命令行: $ dir=`pwd` 另一种形式是:$(命令表)。上面的命令行也可以改写为: $ dir=$(pwd) 2.交互输入变量值 利用read命令可以从键盘上读取数据,然后赋给指定的变量。read命令的一般格式是: read 变量1 [ 变量2 …] 例如: read a b c 输入数据时,数据间以空格或制表符作为分隔符。如果变量个数与给定数据个数相同,则依次对应赋值;如果变量个数少于数据个数,则从左至右对应赋值,但最后一个变量被赋予剩余的所有数据;如果变量个数多于给定数据个数,则依次对应赋值,而没有数据与之对应的变量取空串。 3.位置参数 执行Unix/Linux命令或Shell 脚本时可以带有实参。相应地,在Shell脚本中应有变量。执行Shell程序时,用实参去替代这些变量。在Shell脚本中这类变量的名称很特别,分别是0、1、2……这类变量称作位置变量,因为它们与命令行上具体位置的实参相对应:命令名(脚本名)对应位置变量0,第一个实参对应位置变量1,第二个实参对应位置变量2……如果位置变量是由两个或更多个数字构成,那么,必须把它们用一对花括号括起来,如{10}、{11}。命令行实参与脚本中位置变量的对应关系。 例如: $ set `pwd;ls;date` $ echo $1 $2 $3 $9 ${10} ${11} /home/mengqc bash_1 ex1 12 3 21:52:32 如果在脚本中使用的位置参数不超过9个,那么只用$1~$9即可。但是,实际给定的命令行参数有可能多于9个,此时就需要用shift命令移动位置参数。每执行一次shift命令,就把命令行上的实参向左移一位,即相当于位置参数向右移动一个位置。 可以看出,shift命令执行后新$1的值是原$2的值,新$2的值是原$3的值,依此类推。 shift命令不能将$0移走,所以经shift右移位置参数后, $0的值不会发生变化。 4. 预先定义的特殊变量 在Shell中,预先定义了几个有特殊含义的Shell变量,它们的值只能由Shell根据实际情况进行赋值,而不能通过用户重新设置。下面给出这些特殊变量的表示形式及意义: $# 命令行上实际参数的个数,但不包含Shell脚本名。 $?上一条命令执行后的返回值(也称作 “退出码”)。它是一个十进制数。多数Shell命令执行成功时,则返回值为0;如果执行失败,则返回非0值。 $$ 当前进程的进程号。 $! 上一个后台命令对应的进程号,这是一个由1~5位数字构成的数字串。 $- 由当前Shell设置的执行标志名组成的字符串。例如: set -xv 这个命令行给Shell设置了标志-x和-v(用于跟踪输出)。 $* 表示在命令行中实际给出的所有实参字符串,它并不仅限于9个实参。 $ @ 它与$*基本功能相同,但“$@”与“$*”不同。 (责任编辑:IT) |