首页 理论教育 实用LinuxShell编程:内置变量及其功能

实用LinuxShell编程:内置变量及其功能

时间:2023-11-18 理论教育 版权反馈
【摘要】:表4-3列出了一些常用的Bash内置变量。例如,查看内置变量BASH和BASH_VERSION的值:查看当前shell的启动时间,即shell窗口从打开到现在已经过去秒数:下面的例子用来说明内置变量CDPATH的作用。内置变量HISTIGNORE用来指定不希望被记录在历史命令列表中的命令或者命令序列,多个命令用冒号隔开。若该变量的值大于0,则在等待TMOUT秒后还没有任何输入时,当前的shell就会自动退出。

实用LinuxShell编程:内置变量及其功能

表4-3列出了一些常用的Bash内置变量

表4-3 常用的Bash内置变量

978-7-111-48202-4-Chapter04-141.jpg

(续)

978-7-111-48202-4-Chapter04-142.jpg

下面举例说明表4-3中的一部分内置变量的含义与使用。

例如,查看内置变量BASH和BASH_VERSION的值:

978-7-111-48202-4-Chapter04-143.jpg

查看当前shell的启动时间,即shell窗口从打开到现在已经过去秒数:

978-7-111-48202-4-Chapter04-144.jpg

下面的例子用来说明内置变量CDPATH的作用。建立目录A,B和C,并保证子目录C的父目录是/tmp/A/B:

978-7-111-48202-4-Chapter04-145.jpg

在/home/user目录下,第一次运行cdC是失败的,因为在/home/user目录下没有子目录C:

978-7-111-48202-4-Chapter04-146.jpg

第二次运行cdC之前,定义了内置变量CDPATH,将目录/tmp/A/B加入cd命令的搜索路径CDPATH:

978-7-111-48202-4-Chapter04-147.jpg

这时运行cdC时,系统会在内置变量CDPATH包含的路径中查找,并在/tmp/A/B目录下发现C目录。所以在/home/user目录下直接运行cdC,就可以进入/tmp/A/B/C目录,而不需要运行cd/tmp/A/B/C,即不需要输入全路径:

978-7-111-48202-4-Chapter04-148.jpg

再用pwd命令确认一下,确实进入了/tmp/A/B/C目录:

978-7-111-48202-4-Chapter04-149.jpg

内置命令history可以列出历史命令,内置变量HISTFILE(history file的意思)用来指定存放历史命令的文件,通常HISTFILE=~/.bash_history。在用户退出shell时,历史命令会存放在主目录下面的.bash_history文件中。

内置变量HISTIGNORE(history ignore的意思)用来指定不希望被记录在历史命令列表中的命令或者命令序列,多个命令用冒号隔开。例如,设置HISTIGNORE=ls:t*:\&,那么命令ls和以t开头的指令不会被记录在历史命令列表中,&表示上一条命令,&可以使得连续输入的相同的命令只被记录一次,避免重复记录。因为在命令行&表示将命令放在后台,所以在&的前面加反斜杠屏蔽其特殊含义。下面看具体的例子。history命令的选项-c用来清空(clear)历史命令列表。为便于看清例子,先清空历史命令列表:

978-7-111-48202-4-Chapter04-150.jpg

设置在命令的历史记录中将被忽略的命令序列:(www.xing528.com)

978-7-111-48202-4-Chapter04-151.jpg

下面分别运行date,ls,pwd(重复三次),touch命令:

978-7-111-48202-4-Chapter04-152.jpg

现在,运行history命令,得到的历史命令列表不包含ls和touch,并且pwd只出现一次。因为HISTIGNORE包含ls和t*,所以ls和touch不被记录在历史命令列表中;因为HISTIGNORE包含&,当刚刚运行完第二个和第三个pwd命令时,系统发现其与上一条命令完全相同,所以系统不将其记录,只记录第一个pwd:

978-7-111-48202-4-Chapter04-153.jpg

内置环境变量HOME记录着用户的主目录。账户user默认的主目录为/home/user,运行cd或者cd~就进入用户的主目录。一般地,HOME的值无需改动,也最好不要改动。如果改变HOME的值,将影响使用它的命令和脚本的行为,至少影响命令cd和cd~的运行结果。见下例:

978-7-111-48202-4-Chapter04-154.jpg

内置环境变量PWD的值是当前的工作目录,echo$PWD等价于命令pwd,例如:

978-7-111-48202-4-Chapter04-155.jpg

假设在/home/user目录里面有一个脚本current_directory.sh,它的第一条命令显示当前的工作目录,接下来的两条命令创建目录/tmp/maggie/bin并进入其中,最后一条命令显示执行cd/tmp/maggie/bin之后的工作目录:

978-7-111-48202-4-Chapter04-156.jpg

执行脚本current_directory.sh:

978-7-111-48202-4-Chapter04-157.jpg

现在出现一个问题,脚本current_directory.sh运行完成了,那么当前的工作目录是运行脚本之前的目录/home/user呢,还是脚本的最后一条命令所显示的目录/tmp/maggie/bin呢?试试就知道了:

978-7-111-48202-4-Chapter04-158.jpg

可见,当前的工作目录是运行脚本之前的工作目录。这说明,脚本运行时所在的子shell的工作目录的改变不影响父shell的工作目录(其实在3.11.8节已经讲过:子shell中的路径变化不影响父shell)。如果用source运行脚本,则脚本就在当前shell(而不是在一个子shell)运行,那么当前shell的工作目录会发生改变:

978-7-111-48202-4-Chapter04-159.jpg

内置环境变量OLDPWD记录的是前一次的工作目录,命令cd-的作用是回到上一次的工作目录,与cd$OLDPWD作用一致。见下例:

978-7-111-48202-4-Chapter04-160.jpg

内置环境变量TMOUT默认是没有值的。若该变量的值大于0,则在等待TMOUT秒后还没有任何输入时,当前的shell就会自动退出。例如,设置它为20:

978-7-111-48202-4-Chapter04-161.jpg

那么在20s之内,没有任何键盘输入的话,当前shellterminal将自动关闭。

以上列举了表4-3中的部分内置变量,还有很多其他的内置变量,这里不一一讲解。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈