0%

关键字变量

关键字变量

就是bash内部预设值的一些变量。这些变量的变量名都是大写。

1
2
3
4
5
6
7
8
9
10
# man bash | grep -A311 'The following variables are set by the shell'
The following variables are set by the shell:

BASH Expands to the full file name used to invoke this instance of bash.
BASHOPTS
A colon-separated list of enabled shell options. Each word in the list is a valid argument for the -s option to the shopt builtin
command (see SHELL BUILTIN COMMANDS below). The options appearing in BASHOPTS are those reported as on by shopt. If this variable
is in the environment when bash starts up, each shell option in the list will be enabled before reading any startup files. This
variable is read-only.
................

grep是一个字符串搜索程序。

这里是在man bash的输出中搜索 ‘The following variables are set by the shell’这个字符串。

-A311 意思是把这个字符串及其下面的311行都打印出来。

正好就使我们要找的内容。

全部的关键字变量都在这里。大概过一遍就好。不用全部记住。

但是一下几个还是要求记一下的。

变量名 说明
BASHPID 当前shell PID,和$$有不同。比如在进程中的几种情况下会不一样。
HISTFILE 保存历史命令列表文件的路径
HISTFILESIZE 保存在HISTFILE中的最大项
HISTSIZE 保存在历史聊表中的最大项
HOME 当前用户的家目录
IFS 字段分隔符
LANG 没有用LC_*变量特别设置是的区域目录
LC_* 用locale命令可以看到相关变量
MAIL 用户邮件保存地址
PS1 SHELL主提示符。在我的测试机上是:[root@vm-101 ~]
PS2 SHELL辅助提示符
PS3 select的提示符
PS4 BASH调试符
OLDPATH 上次待过的路径
PPID 父进程ID
HOMENAME 主机名
UID 当前用户ID
USER 当前用户名
PATH 外部命令搜索路径
SHELL 当前用户用的shell
LDPATH 一系列用冒号隔开的目录,动态链接器将在这些目录里查找库文件
MANPATH 一系列用冒号隔开的目录,命令man会在这些目录里搜索man页面

重头戏一般都是在最后。最后一个PATH变量很重要。

以上变量都可以配置在bash的配置文件中。主要是/etc/profile和~/.bash_profile这两个文件。

一个是系统全局生效,一个是当前用户生效。

查看当前系统中的环境变量

1
2
3
# printenv	或者
# set
# env

小小的总结

到这里,大家已经对bash有一个比较总体的感觉了。写一个不复杂的100-1000行的脚本应该没有问题。

但是复杂的,需要一些高技巧的脚本,可能还不够。

下面我们在针对以下特殊要求,特殊场景,再来提升下。