项目导入
系统管理员有一项重要工作——利用shell编程来减小网络管理的难度和强度。shell的文本处理工
具、重定向和管道操作、正则表达式等是shell编程的基础,也是必须掌握的内容。
1 项目知识储备
shell 支持具有字符串值的变量。shell变量不需要专门的说明语句,可通过赋值语句完成变量说
明并予以赋值。在命令行或shell脚本文件中使用$name的形式引用变量name的值。
1.1 变量的定义和引用
在shell中,为变量赋值的格式如下。
name=string
其中,name是变量名,它的值是string,=是赋值符号。变量名由以字母或下画线开头的字母、数字和下画线字符序列组成。
通过在变量名(name)前加$字符(如$name)引用变量的值,引用的结果就是用字符串string代替$name,此过程也称为变量替换。
在定义变量时,若 string中包含空格、制表符和换行符,则 string 必须用'string'或"string"的形式,即用单引号或双引号将其引起来。双引号内允许变量替换,而单引号内不可以。
下面给出一个定义和使用shell变量的例子。
1.2shell变量的作用域
与程序设计语言中的变量一样,shell 变量也有规定的作用范围。shell 变量分为局部变量和全局变量。
• 局部变量的作用范围仅限命令行所在的shell或shell脚本文件中。
• 全局变量的作用范围则包括本shell进程及其所有子进程。
• 可以使用export内置命令将局部变量设置为全局变量。
下面给出一个测试shell变量作用域的例子。
1.3环境变量
环境变量是指由 shell 定义和赋初值的 shell 变量。shell用环境变量来确定查找路径、注册目录、终端类型、终端名称、用户名等。所有环境变量都是全局变量,并可以由用户重新设置。表7-1所示为 shell 中常用的环境变量。
不同类型的 shell 的环境变量有不同的设置方法。在 bash 中,设置环境变量用 set 命令,其语法格式如下。
set环境变量=变量的值
例如,设置用户账户的主目录为/home/iohn,可以使用以下命令。
[root@Server01~]# set HOME=/home/john
不加任何参数直接使用set命令可以显示用户当前所有环境变量的设置,如下所示。
可以看到其中路径PATH的设置为(使用“set lgrep PATH=”命令过滤需要内容):
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin。
总共有7个目录,bash 会在这些目录中依次搜索用户输入的命令的可执行文件。
在环境变量前面加上$表示引用环境变量的值,示例如下。
[root@Server01 ~]# cd $HOME
上述命令将把目录切换到用户账户的主目录。
修改PATH变量时,若将一个路径 /tmp 加到 PATH 变量前,则应按如下设置。
[root@Server01~]# PATH=/tmp:$PATH
此时,在保存原有PATH路径的基础上进行添加。在执行命令前,shell会先查找这个目录。要将环境变量重新设置为系统默认值,可以使用unset命令。例如,下面的命令用于将当前的语言环境重新设置为默认的英文状态。
[root@Server01 ~]# unset LANG
1.4工作环境设置文件
shell环境依赖于多个文件的设置。用户并不需要每次登录后都对各种环境变量进行手动设置通过环境设置文件,用户工作环境的设置可以在用户登录时由系统自动完成。环境设置文件有两种,一种是系统中的用户环境设置文件,另一种是用户设置的环境设置文件。
(1)系统中的用户环境设置文件。
登录环境设置文件:/etc/profilc。
(2)用户设置的环境设置文件。
登录环境设置文件:$HOME/.bash_profile。
非登录环境设置文件:$HOME/.bashrc。
[注意 :只有在特定的情况下系统才读取 profile 文件,确切地说是在用户登录的时候读取。运行shell 脚本以后,就无须再读 profile 文件了。]
系统中的用户环境设置文件对所有用户均有效,而用户设置的环境设置文件仅对用户自身有效。用户可以修改自己的用户环境设置文件来覆盖系统环境设置文件中的全局设置。例如,用户可以将自定义的环境变量存放在 $HOME/.bash_profile 中,将自定义的别名存放在 $HOME/.bashrc 中,以便在每次登录和调用子 shell 时生效。