本章将详细讨论Unix环境变量。
环境变量是Unix系统中定义的一些变量,由系统、用户或程序设置。环境变量的变量名是字符串,赋值可以是数字、文本、文件名、设备或任何其他类型的数据。
示例:
[kevin@localhost ~]$ TEST="this is test"
[kevin@localhost ~]$ echo $TEST
this is test
上面定义了一个环境变量TEST
,然后使用echo
命令打印变量值。
注意,环境变量的设置没有使用
$
符号,但是在访问它们时,使用$
符号作为前缀。变量在shell中有效,离开shell后将失效。
当用户登录系统时,shell将在初始化时设置环境变量,shell将先后从下面文件中读取初始化信息:
- /etc/profile
- ~/.profile
完成初始化后,shell显示命令提示符:
$
用户可以在其后输入命令执行。
.profile文件
文件/etc/profile是全局配置文件,由Unix系统管理员维护,包含系统上所有用户的shell初始化信息。
文件~/.profile是用户配置文件,由用户维护,你可以向该文件添加任意shell自定义信息。
你可以查看用户目录下的.profile文件(有的系统是.bash_profile
)。使用vi编辑器打开它,查看、修改里面的环境变量设置。
设置路径
在命令提示符后键入任何命令,shell必须在执行命令之前找到该命令。
PATH
变量指定shell查找命令路径。通常路径变量设置如下:
$ PATH=/bin:/usr/bin
冒号(:)分隔的每个条目都是目录,shell执行一个命令时,将在这些目录中查找命令程序,如果找不到,就会报错:
[kevin@localhost ~]$ aaa
-bash: aaa: command not found
PS1和PS2变量
PS1定义了命令提示符,PS2定义了命令的继续提示符,即如果一行命令不完整但回车了,会提示用户继续输入。
可以通过修改PS1与PS2的值,修改提示符。
查看PS1:
[kevin@localhost ~]$ echo $PS1
[\u@\h \W]\$
\u
, \h
, \W
都是具有特殊含义的字符,如下表所示:
序号 | 转义字符 |
---|---|
1 |
\t 当前时间,格式:HH:MM:SS |
2 |
\d 当前日期,格式:Weekday Month Date |
3 |
\n 新一行 |
4 |
\s 当前shell环境 |
5 |
\W 工作目录 |
6 |
\w 工作目录绝对路径 |
7 |
\u 当前用户名 |
8 |
\h 当前主机名 |
9 |
\# 当前命令序号,随着执行命令数量增加 |
10 |
\$ 提示符符号,如果是root用户提示符符号变为“#”,普通用户“$” |
您可以在每次登录时自己进行更改,或者通过将更改添加到.profile文件中,在PS1中自动进行更改。
通过修改PS1修改提示符:
[kevin@localhost ~]$ PS1=%
%
%ls -l
total 4
-rwxrwxrwt. 1 root root 7 Apr 1 11:35 demofile
%
如果想让修改长期有效,可以在.profile文件中设置PS1。
PS2定义了命令的继续提示符,即如果一行命令不完整但回车了,会提示用户继续输入。
默认的继续提示符是>(大于号),可通过重新定义PS2变量值更改。
默认继续提示符的例子:
$ echo "this is
>a test"
this is a
test
$
定制的继续提示符例子:
$ PS2="-->"
$ echo "this is
-->a test"
this is
a test
常用环境变量
下表列出常用的环境变量:
序号 | 环境变量 |
---|---|
1 |
DISPLAY X11程序默认使用的显示标识符。 |
2 |
HOME 当前用户目录,cd命令的默认参数。 |
3 |
LANG 系统语言设置 |
4 |
LD_LIBRARY_PATH 链接器程序查找路径 |
5 |
PATH 命令查找路径 |
6 |
PWD 当前工作目录 |
7 |
RANDOM 表示0到32,767之间的随机整数 |
8 |
SHLVL shell嵌套级别,每次启动bash实例时递增1。此变量对于确定exit命令是否可结束当前会话非常有用。 |
9 |
TERM 表示显示类型。 |
10 |
TZ 时区,如GMT, AST |
11 |
UID 当前用户的数字ID,在shell启动时初始化。 |
示例:
[kevin@localhost ~]$ echo $HOME
/home/kevin
[kevin@localhost ~]$ echo $PWD
/home/kevin
[kevin@localhost ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/kevin/.local/bin:/home/kevin/bin
[kevin@localhost ~]$ echo $TERM
xterm
[kevin@localhost ~]$