1、shell变量是弱变量,即该变量不需要定义就能使用。
a是变量
$a是变量的值
2、位置参数变量
位置参数:$0表示命令本身 ; $1表示第一个参数; $2表示第二个参数;
以此类推到$9,共十个。
3、进程变量
$# 表示传递给shiell命令文件的参数个数(不包含命令文件本身)
如:$ test a b c
$ echo $#
$ 3
$? 表示执行命令的退出状态,其值为0,1等。正常退出为0,异常退出为非0、
$$ 变量的值为当前进程的进程号
$* 该变量的值为命令行的所有变元
$! 在后台运行的最后一个进程的进程号
$- 变量的值为shell中当前设置的个执行标志之名称组成的串
4、标准的shell变量
ENV | 保存用来初启新shell的文件名 |
FCEDIT | 保存fc命令的默认的编辑器名字 |
HOME | 保存当前用户的主目录 |
LINENO | 保存当前脚本或函数的当前序列号,在脚本和函数的上下文以外其值没有意义 |
保存shell查看新邮件的文件名 | |
MAILCHECK | 保存两次信箱查看之间的秒数 |
OLDPWD | 保存先前由cd命令设置的工作目录 |
OPTARG | 保存getopts命令最近处理的可选参数的值 |
PATH | 保存命令搜索路径 |
PPID | 父进程的ID号 |
PS1 | Shell的主提示符 |
PS2 | Shell的次提示符 |
PS3 | 保存select命令的提示符 |
PWD | 当前工作目录 |
RANDOM | 每次它使用时都保存一个随机数 |
SECONDS | 保存当前shell实例被启动以来经历的时间,如给SECONDS赋值,则SECONDS为赋的值家经历的时间 |
TMOUT | 显示主提示符之后等待输入的秒数,如在指定时间没输入则shell终止 |
5、变量的作用空间
在shell脚本中定义的变量尽在脚本中有效,但使用如下的一些命令可以改变其作用域或属性:
- export [option] [name[=value]]
--
表示选项结束,所有后续参数都是实参
-f
表明在“名-值”对中的名字是函数名
-n
把全局变量转换成局部变量,即命名的变量不在传给子shell
-p
显示全局变量列表(全局变量,即在子shell中也有效的变量)
缺省
把变量定义为全局变量
- let expression
用于创建不能传给子shell的变量,该命令仅在过程内部有效:如local后不跟参数,那么在当前已定义的局部变量列表就送往标准输出显示
- readonly [option][name[=value]]
用于显示或则设置制度变量和函数,如readonly后部分参数,则在案标准输出上显示已定义的只读变量和函数
-- 表明选项结束,所有后续参数都是实参
-- 创建只读函数
- unset [option] name[name...]
用于取消变量和函数的定义(即删除变量),但PATH、PPID、PSI、PS2、UID、EUID等变量不能删除
6、引号规则
用单引号(‘)把该字符串引起来,shell度单引号中的任何字符不做任何解释,而只是简单保持原状。
$TestString='$PATH*\\[a-x]? 2>&1'
$echo $TestString
$$PATH *\\[a-x]? 2>&1
用双引号吧字符串引起来,则$、\、`、"四个字符有特殊含义,要对齐进行特殊解释:
$ 用气候的变量的值来代替这个变量和$
\ 告诉shell不要对它后面的那个字符进行特殊处理,按本意来解释
` 告诉shell用两个反引号之间的命令的结果代替那个名伶串(包括另个反引号)
" 会同前一个"匹配