第 4 章 Shell 与 Vi 编辑器
2. Shell 变量的作用域
与程序设计语言中的变量一样,Shell 变量有其规定的作用范围。Shell 变量分为局
部 变量和全局变量。
? 局部变量的作用范围仅仅限制在其命令行所在的 Shell 或 Shell 脚本文件中。
? 全局变量的作用范围则包括本 Shell 进程及其所有子进程。
? 可以使用 export 内置命令将局部变量设置为全局变量。 下面给出一个 Shell 变量作用域的例子。
Shell 变量作用域的举例 //在当前 Shell 中定义变量 var1
$ var1=Linux //在当前 Shell 中定义变量 var2 并将其输出
$ var2=unix
$ export var2 //引用变量的值
$ echo $var1
Linux
$ echo var2
unix //显示当前 Shell 的 PID
$echo $$
2670
$ //调用子 Shell
$ Bash //显示当前 Shell 的 PID
$ echo $$
2709 //由于 var1 没有被 export,所以在子 Shell 中已无值
$ echo $var1 //由于 var2 被 export,所以在子 Shell 中仍有值
$ echo $var2
unix //返回主 Shell,并显示变量的值
$ exit
$echo $$
2670
- 75 -
第 4 章 Shell 与 Vi 编辑器
$ echo $var1 Linux $ echo var2
unix
$
3. 环境变量
环境变量是指由 Shell 定义和赋初值的 Shell 变量。Shell 用环境变量来确定查找路径、 注册目录、终端类型、终端名称、用户名等。所有环境变量都是全局变量,并可以由用户 重新设置。表 4-3 列出了一些系统中常用的环境变量。
表 4-3 Shell 中的环境变
量
环境变量名 EDITOR、 说明 环境变量名 说明 FCEDIT HISTFILE HISTSIZE Bash fc 命令的默认编辑器 PATH 用于储存历史命令的文件 历史命令列表的大小 当前用户的用户目录 前一个工作目录 Bash 寻找可执行文件的搜索路径 命令行的一级提示符 命令行的二级提示符 PS1 PS2 HOME OLDPWD PWD SECONDS 当前工作目录 当前 Shell 开始后所流逝的秒数
不同类型的 Shell 的环境变量有不同的设置方法。在 Bash 中,设置环境变量用 set 命
令,命令的格式是:
set 环境变量=变量的值
例如,设置用户的主目录为/home/johe,可以用以下命令:
$ set HOME=/home/john
不加任何参数地直接使用 set 命令可以显示出用户当前所有环境变量的设置,如下所 示:
$ set
BASH=/bin/Bash BASH_ENV=/root/.bashrc (略)
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
PS1=?[\%u@\\h \\W]\\$? PS2=?>?
- 76 -
SHELL=/bin/Bash 第 4 章 Shell 与 Vi 编辑器
可以看到其中路径 PATH 的设置为:
- 77 -
第 4 章 Shell 与 Vi 编辑器
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
总共有 7 个目录,Bash 会在这些目录中依次搜索用户输入的命令的可执行文件。 在环境变量前面加上$符号,表示引用环境变量的值,例如:
# cd $HOME
将把目录切换到用户的主目录。
当修改 PATH 变量时,如:将一个路径/tmp 加到 PATH 变量前,应设置为:
# PATH=/tmp:$PATH
此时,在保存原有 PATH 路径的基础上进行了添加。Shell 在执行命令前,会先查找这 个
目录。
要将环境变量重新设置为系统默认值,可以使用 unset 命令。例如,下面的命令用于 将当前的语言环境重新设置为默认的英文状态。
# unset LANG
4. 工作环境设置文件
Shell 环境依赖于多个文件的设置。用户并不需要每次登录后都对各种环境变量进行手 工设置,通过环境设置文件,用户的工作环境的设置可以在登录的时候自动由系统来完成。 环境设置文件有两种,一种是系统环境设置文件,另一种是个人环境设置文件。
1)系统中的用户工作环境设置文件 z 登录环境设置文件:/etc/profile z 非登录环境设置文件:/etc/bashrc 2)用户设置的环境设置文件
z 登录环境设置文件:$HOME/.Bash_profile z 非登录环境设置文件:$HOME/.bashrc 注意:只有在特定的情况下才读取 profile 文件,确切地说是在用户登录的时候。当运 行 Shell 脚本以后,就无需再读 profile。
系统中的用户环境文件设置对所有用户均生效,而用户设置的环境设置文件对用户自 身生效。用户可以修改自己的用户环境设置文件来覆盖在系统环境设置文件中的全局设置。 例如:
1)用户可以将自定义的环境变量存放在$HOME/.Bash_profile 中; 2)用户可以将自定义的别名存放在$HOME/.bashrc 中,以便在每次登陆和调用子 Shell 时生效。
4.1.3 正则表达式
1. grep 命令
在第三章我们已介绍过 grep 命令的用法。grep 命令用来在文本文件中查找内容,它的 名
- 78 -
第 4 章 Shell 与 Vi 编辑器
字源于“global regular expression print”。指定给 grep 的文本模式叫做“正则表达式”。
- 79 -