回顾
- 区分了单引号和双引号的区别;
- 了解了更多的转义字符;
- 退出时的状态。
访问变量
变量使用得当,可以使脚本变得更加强大和有弹性。
内部变量
-
$BASH
:Bash二进制程序文件的路径; -
$BASH_ENV
:该环境变量保存一个Bash启动文件路径,当启动一个脚本程序时会去读该环境变量指定的文件; -
$BASH_SUBSHELL
:一个指示子shell(subshell)等级的变量; -
$BASH_VERSINFO[n]
:这个数组含有6个元素,指示了安装的Bash版本的信息。它和$BASH_VERSION相似,但它们还是有一些小小的不同;#!/bin/bash for n in 0 1 2 3 4 5 do echo "BASH_VERSINFO[$n] = ${BASH_VERSINFO[$n]}" done exit 0
运行结果如下:
$ ./5-2-BashVersifo.sh
BASH_VERSINFO[0] = 3 # 主版本号.
BASH_VERSINFO[1] = 2 # 次版本号.
BASH_VERSINFO[2] = 57 # 补丁级.
BASH_VERSINFO[3] = 1 # 编译版本.
BASH_VERSINFO[4] = release # 发行状态.
BASH_VERSINFO[5] = x86_64-apple-darwin19 # 结构体系(和变量$MACHTYPE相同). -
$BASH_VERSION
:安装在系统里的Bash版本。其中,检查$BASH_VERSION
是检测哪个shell在运行的好办法。$SHELL
变量不一定能给出正确的答案; -
$DIRSTACK
:在目录堆栈里面最顶端的值; -
$EUID
:有效用户ID; -
$FUNCNAME
:当前函数的名字; -
$GLOBIGNORE
:由通配符(globbing)扩展的一列文件名模式; -
$GROUPS
:目前用户所属的组; -
$HOME
:用户的家目录,通常是/home/username
; -
$HOSTNAME
:在系统启动时由一个初始化脚本中用hostname
命令给系统指派一个名字; -
$HOSTTYPE
:机器类型; -
$IFS
:内部字段分隔符; -
$IGNOREEOF
:忽略EOF:在退出控制台前有多少文件结尾标识(end-of-files,control-D)会被shell忽略; -
$LC_COLLATE
:它通常在.bashrc
或/etc/profile
文件里被设置,它控制文件名扩展和模式匹配的展开顺序。如果设置不当,LC_COLLATE
会在文件名通配符(filename globbing)里引起不可预料的结果; -
$LC_CTYPE
:这个内部变量控制通配符(globbing)和模式匹配中的字符解释; -
LINENO
:这个变量表示在本shell脚本中该变量出现时所在的行数。它只在脚本中它出现时有意义,它一般可用于调试; -
$MACHTYPE
:机器类型; -
$OLDPWD
:上一次工作的目录(“OLD-print-working-directory”,你上一次进入工作的目录); -
$OSTYPE
:操作系统类型; -
$PATH
:可执行程序文件的搜索路径。一般有/usr/bin/, /usr/X11R6/bin/, /usr/local/bin,等等; -
$PIPESTATUS
:此数组变量保存了最后执行的前台管道的退出状态。相当有趣的是,它不一定和最后执行的命令的退出状态一样; -
$PPID
:一个进程的$PPID
变量保存它的父进程的进程ID(pid); -
$PROMPT_COMMAND
:这个变量在主提示符前($PS1显示之前)执行它的值里保存的命令; -
$PS1
:这是主提示符(第一提示符),它能在命令行上看见; -
$PS2
:副提示符(第二提示符),它在期望有附加的输入时能看见。它显示像>
的提示; -
$PS3
:第三提示符。它在一个select循环里显示; -
$PS4
:第四提示符,它在用-x选项调用一个脚本时的输出的每一行开头显示。它通常显示像+
的提示; -
$PWD
:工作目录(即你现在所处的目录); -
$REPLY
:没有变量提供给read命令时的默认变量。这也适用于select命令的目录,但只是提供被选择的变量项目编号而不是变量本身的值; -
$SECONDS
:脚本已运行的秒数; -
$SHELLOPTS
:已经激活的shell选项列表,它是一个只读变量; -
$SHLVL
:SHELL的嵌套级别。指示了Bash被嵌套了多深。在命令行里,$SHLVL
是1,因此在一个脚本里,它是2; -
$TMOUT
:如果$TMOUT环境变量被设为非零值时间值time,那么经过time这么长的时间后,shell提示符会超时.这将使此shell退出登录; -
$UID
:用户ID号; -
$#
:命令行参数或者是位置参数的数量; -
$*
:所有的位置参数都被当成单个单元; -
$@
:和$*
相同,但每个参数都是一个引起的字符串; -
$-
:(使用set命令)传给脚本的标记; -
$!
:在后台运行的最后一个作业的PID(进程ID); -
$_
:保存前一个命令最后一个参数的变量值; -
$?
:一个命令,函数或脚本自身的退出状态码; -
$$
:脚本本身的进程PID。