位置变量和特殊变量参数,它们是只读的.


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

变量名:$0,$1,$2,$3,$4,$5,$6,$7,$8,$9
说明:
$0: 表示脚本名称。
$1,$2,...,$9:$1表示向脚本传递的第一个参数,$2表示向脚本传递的第二个参数,...,$9表示向脚本传递的第九个参数.

特殊变量(参数)
shell对一些参数做特殊处理,这些参数只能被引用而不能被赋值.

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

示例:

[root@www ~]                                                                        ;     ;                ;          ;         a=();     ;    length_a=     ((i=;i
echo ; ; ; ; b=(); ; ((i=;i< ; ; asdf >/dev/null; [root@www ~] [root@www ~]

此脚本的名称$0为:test_parm.sh
此脚本的第一个位置参数$1为:a
此脚本的第二个位置参数$2为:b
此脚本的第三个位置参数$3为:c
此脚本的第四个位置参数$4为:d
此脚本的第五个位置参数$5为:e
此脚本的第六个位置参数$6为:f
此脚本的第七个位置参数$7为:g
此脚本的第八个位置参数$8为:h
此脚本的第九个位置参数$9为:i
此脚本的第十个位置参数$10为:a0
由此可见shell将$10认为$1+0
此脚本的参数个数$#为: 12

#############
变量$*的输出:
--------------------------------------
变量$*的个数为: 1个,其值分别为:
"a b c d e f g h i j k l"

#############
变量$@的输出:
--------------------------------------
变量$@的个数为: 12个,其值分别为:
"a"
"b"
"c"
"d"
"e"
"f"
"g"
"h"
"i"
"j"
"k"
"l"

脚本当前进程号$$为: 2951
最后命令的退出状态$?正确时为: 0
最后命令的退出状态$?错误时为: 127