UNIX 中一个重要的概念是环境,它是由环境变量所定义。一些环境变量是由系统设置,有一些是由用户设置的,还有一些是被 Shell,或任何会加载另一个程序的程序所设置。
一个变量是由一个字符组成的串,并且我们会给它赋值。给变量赋的值可以是一个数字,文本,文件名,设备或任何其他类型的数据。
例如,首先,我们设置一个名称为 TEST 的变量,然后我们使用 echo 命令查看它的值:
$TEST="Unix Programming"
$echo $TEST
Unix Programming
注意,设置环境变量不使用 $
符号,但在访问他们的时候,我们使用 $
符号作为前缀。这些变量保存它们的值,直到我们退出 shell。
当你登录到系统,shell 经过初始化阶段,在该阶段会设置各种环境变量。这通常会涉及到两步的处理过程,shell 会读取以下文件:
/etc/profile
处理流程如下:
一旦这两个文件读取完成,shell 显示一个等待输入命令:
$
这是提示,在它后面你可以输入命令来执行。
注意:Shell 初始化的详细过程通常利用的是 Bourne Shell,但是其他的一些文件处理是利用 bash 和 ksh shell 程序。
/etc/profile 文件是由 UNIX 的系统管理员维护的,并且该文件中包含了 Shell 初始化的信息,这个信息可以被任何系统中的任何用户查看。
如果你有对 .profile 文件操作的权限,那么你就可以在这个文件中添加你想要的尽可能多的定制 Shell 信息。
你可以在你的根目录下面查看 .profile 文件。利用 vi 编辑器打开它,查看其中设置的所有环境变量。
通常您所使用的终端的类型由 login 或 getty 程序自动配置。有时,自动配置过程会推测你的终端类型是不对的。
如果您的终端设置错误,命令的输出可能看起来很奇怪,或者你可能无法与 Shell 正常交互。
确保这不是这种情况,大多数用户的终端最少相同的特性如下:
$TERM=vt 100
$
当你在命令提示符下输入任何命令,Shell 只有确定了命令所在的目录才能执行命令。
Shell 是在环境变量 PATH 中寻找命令所在的目录。通常,它设置如下:
$PATH=/bin:/usr/bin
$
这里的每一个由冒号,:,分开的实体是目录。如果你请求 Shell 执行一个命令,但是它不能在 PATH 环境变量中找到任何命令所在的路径,这时会出现一个类似如下的消息:
$hello
hello: not found
$
还有类似于 PS1 和 PS2 这样的变量,将会在下一节说明。
shell 显示给你的命令提示符存储在变量 PS1 中。你可以改变这个变量成任何你想要的字符。只要你改变它,它就会从你改变后开始起作用。
例如,如果你输入如下的命令:
$PS1='=>'
=>
=>
=>
你的提示输入符将会变成 =>。设置 PS1 的值,让它显示工作目录,输入如下的命令:
=>PS1="[u@h w]$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
该命令的结果是,显示用户的用户名、机器名称(主机名),和工作目录。
有相当多的转义序列,可以用作 PS1 的参数,尽量让自己只关注最关键的部分,不要让下面的信息对你造成过多的压力。
转义序列 | 描述 |
---|---|
t | 将当前的时间表示成 HH:MM:SS 的形式 |
d | 将当前的日期表示成 周 月 日 |
n | 新的一行。 |
s | 当前的环境变量。 |
W | 工作目录。 |
w | 工作目录的完整路径。 |
u | 当前用户的用户名。 |
h | 当前机器的主机名称。 |
# | 当前命令的编号。每输入一条命令编号加 1。 |
$ | 如果有效的 UID 是 0(也就是说,如果你以 root 用户进行登录),命令提示符会变成 #,否则,提示符是 $。 |
你可以通过修改 .profile
文件,在每次登录的时候进行上面的那些转换。这样每次登录就会自动的改变 PS1 的值。
当你输入一个不完整的命令是,shell 将再次显示一个命令输入符,等待你再次完成命令并回车。
默认二级提示 >(大于号),但可以改变通过设置 PS2 变量进行修改:
下面的示例使用默认的二级提示:
$ echo "this is a
> test"
this is a
test
$
下面是一个通过重新定义 PS2 变量自定义输入符的示例:
$ PS2="secondary prompt->"
$ echo "this is a
secondary prompt->test"
this is a
test
$
以下是部分重要的环境变量的列表。这些变量将按照上面提到的方式被设置和访问:
变量 | 描述 |
---|---|
DISPLAY | 包含显示设备的标识符,默认情况下它的值是 X11。 |
HOME | 表明当前用户的根目录,默认的参数中会内置 cd 命令。 |
IFS | 表明系统内部所使用字段分隔符,它通常用在解析器分割单词中。 |
LANG | LANG 扩展系统默认的语言:LC_ALL 可以用来覆盖这个变量。例如,如果它的值是 pt_BR,那么系统的语言就被设置成(Brazillian)Portuguese 和地区被设置成 Brazil。 |
LD_LIBRARY_PATH | 许多 UNIX 系统动态链接器,包含以冒号分隔的目录列表,在执行后,动态连接器构建过程图像过程中,在搜索其他目录之前,先搜索共享对象。 |
PATH | 命令的搜索路径。它是由冒号分隔开一系列目录,也就是 shell 寻找命令所在的目录。 |
PWD | 当前的工作目录,由 cd 命令设置的。 |
RANDOM | 每次被引用的时候就会生成一个 0 到 32,767 范围内的一个随机整数。 |
SHLVL | 每次一个 bash 实例被启动这个值就会加 1。这个变量对于决定内置的退出命令是否终止当前会话是很有用的。 |
TERM | 显示类型。 |
TZ | 时间区域。它能被赋值为 GMT,AST 等。 |
UID | 数值类型标识当前用户,它在 shell 启动的时候被初始化。 |
如下是几个简单的例子显示几个环境变量:
$ echo $HOME
/root
]$ echo $DISPLAY
$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
$
Shell数组一个 Shell 变量只能够容纳一个值。这种类型的变量称为标量变量。Shell 数组变量可以同时容纳多个值,它支持不同类型的...
Shell基本操作符每一种 Shell 都支持各种各样的操作符。我们的教程基于默认的 Shell(Bourne),所以在我们的教程中涵盖所有重要的...
前言前面章节已经介绍了Shell编程范例之数值、布尔值、字符串、文件、文件系统、进程等的操作。这些内容基本覆盖了网络中某个独...
upstream 模块简介Nginx 模块一般被分成三大类:handler、filter 和 upstream。前面的章节中,读者已经了解了 handler、filter。...
handler 的编写步骤好,到了这里,让我们稍微整理一下思路,回顾一下实现一个 handler 的步骤:编写模块基本结构。包括模块的定义...