Linux Bash Shell 位置变量详解

摘要

本文部分内容来源于网络,个人收集整理,请勿传播

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

位置变量:

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

变量名:

1
2
3
4
5
6
7
8
9
10
$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表示没有错误,其他任何值表明有错误;
  • shift 造成参数变量号码偏移,第二个参数变为$1,以此类推。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
[root@www ~]# cat test_parm.sh
#!/bin/bash
# test_parm.sh 2010年6月7号 http://905557157.qzone.qq.com/
# 本程序仅仅是用来说明shell的位置变量和特别变量的一个示例。
echo "此脚本的名称$0为:$0"
echo "此脚本的第一个位置参数$1为:$1"
echo "此脚本的第二个位置参数$2为:$2"
echo "此脚本的第三个位置参数$3为:$3"
echo "此脚本的第四个位置参数$4为:$4"
echo "此脚本的第五个位置参数$5为:$5"
echo "此脚本的第六个位置参数$6为:$6"
echo "此脚本的第七个位置参数$7为:$7"
echo "此脚本的第八个位置参数$8为:$8"
echo "此脚本的第九个位置参数$9为:$9"
echo "此脚本的第十个位置参数$10为:$10"
echo "由此可见shell将$10认为$1+0";
echo "此脚本的参数个数$#为: $#";
#
#
#
echo;
echo "#############"
echo "变量$*的输出:";
echo "--------------------------------------"
a=("$*");
echo "变量$*的个数为: ${#a[@]}个,其值分别为:";
length_a=${#a[@]};
for ((i=0;i
echo "${a[i]}";
done
#
#
#
echo;
echo "#############";
echo "变量$@的输出:";
echo "--------------------------------------"
b=("$@");
echo "变量$@的个数为: ${#b[@]}个,其值分别为:";
for ((i=0;i<${#b[@]};i++));do
echo "${b[i]}";
done
#
#
#
echo;
echo "脚本当前进程号$$为: $$"
echo "最后命令的退出状态$?正确时为: $?"
asdf 2>/dev/null; #此命令不可能执行(除非您正好有一个别名与之相同),执行肯定错误,将错误信息丢掉。
echo "最后命令的退出状态$?错误时为: $?"
[root@www ~]#
[root@www ~]# sh test_parm.sh a b c d e f g h i j k l
此脚本的名称$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