在本章中,我们将详细讨论Unix环境。Unix的一个重要概念是环境,它由环境变量定义。一些是由系统设置的,其他是由您设置的,而其他是由Shell设置的,或者由加载另一个程序的任何程序设置。
变量是我们为其分配值的字符串。分配的值可以是数字,文本,文件名,设备或任何其他类型的数据。
例如,首先我们设置一个变量TEST,然后使用echo命令访问它的值-
$TEST="Unix Programming"
$echo $TEST
它产生以下结果。
Unix Programming
请注意,设置环境变量时不使用$符号,但是在访问它们时,我们使用$符号作为前缀。这些变量将保留它们的值,直到我们脱离Shell。
当您登录到系统时,shell会经历一个称为初始化的阶段来设置环境。这通常是一个两步过程,涉及Shell读取以下文件-
-/etc/profile
- 个人资料
流程如下-
- Shell检查以查看文件/etc/profile是否存在。
- 如果存在,则Shell程序将读取它。否则,将跳过此文件。没有错误信息显示。
- Shell程序会检查您的主目录中是否存在文件.profile。您的主目录是您登录后开始的目录。
- 如果存在,则Shell程序将读取它;否则,它将读取它。否则,shell将跳过它。没有错误信息显示。
一旦读取了这两个文件,shell就会显示提示-
$
这是提示,您可以在其中输入命令以执行命令。
注–此处详细介绍的shell初始化过程适用于所有Bourne类型的shell,但是bash和ksh使用了一些其他文件。
.profile文件
文件/etc/profile由Unix计算机的系统管理员维护,并且包含系统上所有用户所需的Shell初始化信息。
文件.profile在您的控制之下。您可以根据需要向此文件添加尽可能多的Shell定制信息。您需要配置的最少信息集包括-
- 您正在使用的终端类型。
- 在其中找到命令的目录列表。
- 影响终端外观的变量列表。
您可以在主目录中查看可用的.profile。使用vi编辑器将其打开,并检查为您的环境设置的所有变量。
设置终端类型
通常,您使用的终端类型由登录程序或getty程序自动配置。有时,自动配置过程会错误地猜测您的终端。
如果您的终端设置不正确,则命令的输出可能看起来很奇怪,或者您可能无法与Shell正确交互。
为了确保不是这种情况,大多数用户通过以下方式将其终端设置为最低公分母-
$TERM=vt100
$
设置路径
在命令提示符下键入任何命令时,Shell程序必须先找到该命令,然后才能执行该命令。
PATH变量指定Shell程序应在其中查找命令的位置。通常,Path变量设置如下-
$PATH=/bin:/usr/bin
$
在这里,用冒号(:)分隔的每个单独条目都是目录。如果您请求Shell执行命令,但在PATH变量给定的任何目录中都找不到它,则会显示类似以下内容的消息-
$hello
hello: not found
$
下一节将讨论PS1和PS2等变量。
PS1和PS2变量
Shell作为命令提示符显示的字符存储在变量PS1中。您可以将此变量更改为所需的任何值。更改后,Shell将立即使用它。
例如,如果您发出命令-
$PS1='=>'
=>
=>
=>
您的提示将变为=>。要设置PS1的值以使其显示工作目录,请发出命令-
=>PS1="[\u@\h \w]$"
[root@ip-72-167-112-17 /var/www/gingerdoc/unix]
$
[root@ip-72-167-112-17 /var/www/gingerdoc/unix]$
该命令的结果是提示显示用户的用户名,计算机的名称(主机名)和工作目录。
有很多转义序列可以用作PS1的值参数。尝试将自己限制在最关键的位置,以使提示不会使您不知所措。
序号 转义序列和说明
1个 \t
当前时间,表示为HH:MM:SS
2 \d
当前日期,表示为工作日月份日期
3 \n
新队
4 \s
当前的Shell环境
5 \W
工作目录
6 \w
工作目录的完整路径
7 \u
当前用户的用户名
8 \h
当前机器的主机名
9 \#
当前命令的命令号。输入新命令时增加
10 $
如果有效UID为0(也就是说,如果您以root用户身份登录),则以#字符结束提示;否则,以0结尾。否则,请使用$符号
您可以在每次登录时自行进行更改,也可以通过将更改添加到您的.profile文件中来自动进行更改。
当您发出不完整的命令时,shell将显示辅助提示,并等待您完成命令,然后再次按Enter。
默认的辅助提示符是>(大于符号),但是可以通过重新定义PS2 shell变量来更改-
以下是使用默认辅助提示的示例-
$ echo "this is a
> test"
this is a
test
$
下面给出的示例使用自定义提示重新定义PS2-
$ PS2="secondary prompt->"
$ echo "this is a
secondary prompt->test"
this is a
test
$
环境变量
以下是重要环境变量的部分列表。如下所述设置和访问这些变量-
序号 变量与说明
1 ** DISPLAY
包含默认情况下X11**程序应使用的显示的标识符。
2 HOME
指示当前用户的主目录:cd内置命令的默认参数。
3 IFS
指示解析器在扩展后用于单词拆分的内部字段分隔符。
4 LANG
LANG扩展为默认的系统区域设置;LC_ALL可用于替代此设置。例如,如果其值为pt_BR,则将语言设置为(巴西)葡萄牙语,并将语言环境设置为巴西。
5 LD_LIBRARY_PATH
带有动态链接器的Unix系统包含用冒号分隔的目录列表,在exec之后构建过程映像之前,动态链接器应在搜索任何其他目录之前搜索共享对象。
6 PATH
指示命令的搜索路径。它是一个用冒号分隔的目录列表,shell在其中查找命令。
7 PWD
指示由cd命令设置的当前工作目录。
8 RANDOM
每次引用都会生成一个介于0和32,767之间的随机整数。
9 SHLVL
每次启动bash实例时增加一。此变量对于确定内置的exit命令是否结束当前会话很有用。
10 TERM
指显示类型。
11 TZ
指时区。它可以采用GMT,AST等值。
12 UID
扩展为当前用户的数字用户ID,在shell启动时初始化。
以下是显示少量环境变量的示例
$ echo $HOME
/root
]$ echo $DISPLAY
$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
$