楼主: bnso

Linux Shell介绍

[复制链接]
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
111#
 楼主| 发表于 2006-8-13 19:00 | 只看该作者
14.1 什么是shell变量
变量可以定制用户本身的工作环境。使用变量可以保存有用信息,使系统获知用户相关
设置。变量也用于保存暂时信息。例如:一变量为E D I TO R,系统中有许多编辑工具,但哪一
个适用于系统呢?将此编辑器名称赋给E D I TO R,这样,在使用c r o n或其他需要编辑器的应用
时,这就是你将一直使用的E D I TO R取值,并将之用作缺省编辑器。
下面是一个例子,登录的审核系统需要编辑。在菜单中选择此选项时,应用查询E D I TO R
变量值,其值为v i。系统知道可使用此编辑器。
另一个例子需要登录数据库系统,键入下列命令:
$ isql -Udavet -Pabcd -Smethsys
这里- S为正在连接的服务器名称。有一变量D S Q U E RY保存服务器名称值。设置服务器名
称值到D S Q U E RY变量,这样如果登录时不使用- S提供服务器名称,应用将查询D S Q U E RY变
量,并使用其取值作为服务器名称。需要做的全部工作就是键入下列命令:
$ isql -Udavet -Pabcd
工作方式同上例。
14.2 本地变量
本地变量在用户现在的s h e l l生命期的脚本中使用。例如,本地变量f i l e - n a m e取值为
l o o p . d o c,这个值只在用户当前s h e l l生命期有意义。如果在s h e l l中启动另一个进程或退出,此
值将无效。这个方法的优点就是用户不能对其他的s h e l l或进程设置此变量有效。
表1 4 - 1列出各种实际变量模式
使用变量时,如果用花括号将之括起来,可以防止s h e l l误解变量值,尽管不必一定要这
样做,但这确实可用。
要设置一本地变量,格式为:
$ variable-name=valu或e $ { v a r i a b l e - n a m e = v a l u e }
注意,等号两边可以有空格。如果取值包含空格,必须用双引号括起来。s h e l l变量可以
用大小写字母。
表14-1 变量设置时的不同模式
Va r i a b l e - n a m e = v a l u e 设置实际值到v a r i a b l e - n a m e
Va r i a b l e - n a m e + v a l u e 如果设置了v a r i a b l e - n a m e,则重设其值
Va r i a b l e - n a m e : ? v a l u e 如果未设置v a r i a b l e - n a m e,显示未定义用户错误信息
Va r i a b l e - n a m e ? v a l u e 如果未设置v a r i a b l e - n a m e,显示系统错误信息
Va r i a b l e - n a m e : = v a l u e 如果未设置v a r i a b l e - n a m e,设置其值
Va r i a b l e - n a m e : - v a l u e 同上,但是取值并不设置到v a r i a b l e - n a m e,可以被替换

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
112#
 楼主| 发表于 2006-8-13 19:00 | 只看该作者
14.2.1 显示变量
使用e c h o命令可以显示单个变量取值,并在变量名前加$,例如:
可以结合使用变量,下面将错误信息和环境变量L O G N A M E设置到变量e r r o r- m s g。
上面例子中,s h e l l首先显示文本,然后查找变量$ L O G N A M E,最后扩展变量以显示整个
变量值。
14.2.2 清除变量
使用u n s e t命令清除变量。
unset variable-name
14.2.3 显示所有本地shell变量
使用s e t命令显示所有本地定义的s h e l l变量。
第14章环境和shell变量133
下载
s e t输出可能很长。查看输出时可以看出s h e l l已经设置了一些用户变量以使工作环境更加
容易使用。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
113#
 楼主| 发表于 2006-8-13 19:00 | 只看该作者
14.2.4 结合变量值
将变量并排可以使变量结合在一起:
14.2.5 测试变量是否已经设置
有时要测试是否已设置或初始化变量。如果未设置或初始化,就可以使用另一值。此命
令格式为:
$ { v a r i a b l e : - v a l u e }
意即如果设置了变量值,则使用它,如果未设置,则取新值。例如:
变量c o l o u r取值b l u e,e c h o打印变量c o l o u r时,首先查看其是否已赋值,如果查到,则使
用该值。现在清除该值,再来看看结果。
上面的例子并没有将实际值传给变量,需使用下述命令完成此功能:
$ { v a r i a b l e : = v a l u e }
下面是一个更实用的例子。查询工资清单应用的运行时间及清单类型。在运行时间及类
型输入时,敲回车键表明用户并没有设置两个变量值,将使用缺省值( 0 3 : 0 0和We e k l y),并
传入a t命令中以按时启动作业。
134 第三部分登录环境
下载
在输入域敲回车键,输出结果如下:
也可以编写脚本测试变量是否取值,然后返回带有系统错误信息的结果。下面的例子测
试变量f i l e是否取值。
以上结果可读性不好,但是可以加入自己的脚本以增加可读性。
测试变量是否取值,如果未设置,则返回一空串。方法如下:
$ { v a r i a b l e : + v a l u e }
使用下述方法初始化变量为空字符串。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
114#
 楼主| 发表于 2006-8-13 19:00 | 只看该作者
14.2.6 使用变量来保存系统命令参数
可以用变量保存系统命令参数的替换信息。下面的例子使用变量保存文件拷贝的文件名
信息。变量s o u r c e保存p a s s w d文件的路径,d e s t保存c p命令中文件目标。
下面例子中,变量d e v i c e保存磁带设备路径,然后用于在m t命令中倒带。
14.2.7 设置只读变量
如果设置变量时,不想再改变其值,可以将之设置为只读方式。如果有人包括用户本人
想要改变它,则返回错误信息。格式如下:
v a r i a b l e - n a m e = v a l u e
readonly variable-name
下面的例子中,设置变量为系统磁带设备之一的设备路径,将之设为只读,任何改变其
第14章环境和shell变量135
下载
值的操作将返回错误信息。
要查看所有只读变量,使用命令r e a d o n l y即可。
14.3 环境变量
环境变量用于所有用户进程(经常称为子进程)。登录进程称为父进程。s h e l l中执行的用
户进程均称为子进程。不像本地变量(只用于现在的s h e l l)环境变量可用于所有子进程,这
包括编辑器、脚本和应用。
环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在. p r o f i l e文件中
定义。系统管理员可能在/ e t c / p r o f i l e文件中已经设置了一些环境变量。将之放入p r o f i l e文件意
味着每次登录时这些值都将被初始化。
传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用e x p o r t命令导出。
环境变量与本地变量设置方式相同。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
115#
 楼主| 发表于 2006-8-13 19:01 | 只看该作者
14.3.1 设置环境变量
V A R I A B L E - N A M E = v a l u e;export VARIABLE-NAME
在两个命令之间是一个分号,也可以这样写:
V A R I A B L E - N A M E = v a l u e
Export VARIABLE-NAME
14.3.2 显示环境变量
显示环境变量与显示本地变量一样,例子如下:
使用e n v命令可以查看所有的环境变量。
136 第三部分登录环境
下载
14.3.3 清除环境变量
使用u n s e t命令清除环境变量:
14.3.4 嵌入shell变量
Brourne shell 有一些预留的环境变量名,这些变量名不能用作其他用途。通常在
/ e t c / p r o f i l e中建立这些嵌入的环境变量,但也不完全是,这取决于用户自己。以下是嵌入s h e l l
变量列表。
1. CDPAT H
改变目录路径变量,保留一系列由冒号隔开的路径名,用于c d命令。如果设置了C D PAT H,
c d一个目录时,首先查找C D PAT H,如果C D PAT H指明此目录,则此目录成为当前工作目录。
例子如下:
$ CDPATH=:/home/dave/bin:/usr/local;/aepxppsort CDPATH.
如果要
$ cd apps
c d命令首先在C D PAT H中查找目录列表,如果发现a p p s,则它成为当前工作目录。
2. EXINIT
E X I N I T变量保存使用v i编辑器时的初始化选项。例如,调用v i时,要显示行号,且在第
1 0个空格加入t a b键,命令为:
$ EXINIT='set nu tab=10';export EXINIT
3. HOME
H O M E目录,通常定位于p a s s w d文件的倒数第2列,用于保存用户自身文件。设置了
H O M E目录,可以简单使用c d命令进入它。
也可以用
$ cd $ HOME
4. IFS
第14章环境和shell变量137
下载
I F S用作s h e l l指定的缺省域分隔符。原理上讲域分隔符可以是任意字符,但缺省通常为空
格、新行或t a b键。I F S在分隔文件或变量中各域时很有用。下面的例子将I F S设置为冒号,然
后echo PAT H变量,给出一个目录分隔开来的可读性很强的路径列表。
要设置其返回初始设置:
$ IFS=<space><tab>; export IFS
这里< s p a c e > < t a b >为空格和t a b键。
5. LOGNAME
此变量保存登录名,应该为缺省设置,但如果没有设置,可使用下面命令完成它:
6. MAIL
M A I L变量保存邮箱路径名,缺省为/var/spool/mail/<login name>。s h e l l周期性检查新邮
件,如果有了新邮件,在命令行会出现一个提示信息。如果邮箱并不在以上指定位置,可以
用M A I L设置。
$ MAIL=/usr/mail/da;veexport MAIL
7. MAILCHECK
M A I L C H E C K缺省每6 0 s检查新邮件,但如果不想如此频繁检查新邮件,比如设为每2 m,
使用命令:
$ MAILCHECK=12;0export MAILCHECK
8. MAILPAT H
如果有多个邮箱要用到M A I L PAT H,此变量设置将覆盖M A I L设置。
$ MAILPATH=/var/spool/dave:/var/spool/;aedxmpionrt MAILPATH
上面的例子中,M A I L检测邮箱d a v e和a d m i n。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
116#
 楼主| 发表于 2006-8-13 19:01 | 只看该作者
9. PAT H
PAT H变量保存进行命令或脚本查找的目录顺序,正确排列这个次序很重要,可以在执行
命令时节省时间。你一定不想在已知命令不存在的目录下去查找它。通常情况,最好首先放
在H O M E目录下,接下来是从最常用到一般使用到不常用的目录列表次序。如果要在当前工
作目录下查询,无论在哪儿,均可以使用句点操作。目录间用冒号分隔,例如:
$ PATH=$HOME/bin:.:/bin:/usr;/beixnport PATH
使用上面的例子首先查找H O M E / b i n目录,然后是当前工作目录,然后是/ b i n,最后是
/ u s r / b i n。
PAT H可以在系统目录下/ e t c / p r o f i l e中设置,也可以使用下面方法加入自己的查找目录。
$ PATH=$PATH:/$HOME/bi;n:.export PATH
这里使用了/ e t c / p r o f i l e中定义的PAT H,并加入$ H O M E / b i n和当前工作目录。一般来说,
在查找路径开始使用当前工作目录不是一个好办法,这样很容易被其他用户发现。
10. PS1
基本提示符包含s h e l l提示符,缺省对超级用户为#,其他为$。可以使用任何符号作提示
138 第三部分登录环境
下载
符,以下为两个例子:
11. PS2
P S 2为附属提示符,缺省为符号> 。P S 2用于执行多行命令或超过一行的一个命令。
12. SHELL
S H E L L变量保存缺省s h e l l,通常在/ e t c / p a s s w d中已设置,但是如有必要使用另一个s h e l l,
可以用如下方法覆盖当前s h e l l:
13. TERMINFO
终端初始化变量保存终端配置文件的位置。通常在/ u s r / l i b / t e r m i n f o或/ u s r / s h a r e / t e r m i n f o
$ TERMINFO=/usr/lib/termi;nefxoport TERMINFO
14. TERM
T E R M变量保存终端类型。设置T E R M使应用获知终端对屏幕和键盘响应的控制序列类型,
常用的有v t 1 0 0、v t 2 0 0、v t 2 2 0 - 8等。
$ TERM=vt100 ;export TERM
15. TZ
时区变量保存时区值,只有系统管理员才可以更改此设置。例如:
返回值表明正在使用格林威治标准时间,与G M T时差为0,并作E D T保存。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
117#
 楼主| 发表于 2006-8-13 19:02 | 只看该作者
14.3.5 其他环境变量
还有一些预留的环境变量。其他系统或命令行应用将用到它们。以下是最常用的一些,
注意这些值均未有缺省设置,必须显示说明。
1. EDITO R
设置编辑器,最常用。
$ EDITOR=vi ;export EDITOR
2. PWD
当前目录路径名,用c d命令设置此选项。
3. PA G E R
保存屏幕翻页命令,如p g、m o r e,在查看m a n文本时用到此功能。
$ PAGER='pg -f -p%;d'export PAGER
4. MANPAT H
第14章环境和shell变量139
下载
保存系统上m a n文本的目录。目录间用冒号分隔。
$ MANPATH=/usr/apps/man:/usr/local;/emxapnort MANPATH
5. LPDEST或P R I N T E R
保存缺省打印机名,用于打印作业时指定打印机名。
$ LPDEST=hp3si-systems
14.3.6 set命令
在$ H O M E . p r o f i l e文件中设置环境变量时,还有另一种方法导出这些变量。使用s e t命令- a
选项,即set -a指明所有变量直接被导出。不要在/ e t c / p r o f i l e中使用这种方法,最好只在自己
的$ H O M E . p r o f i l e文件中使用。
14.3.7 将变量导出到子进程
s h e l l新用户碰到的问题之一是定义的变量如何导出到子进程。前面已经讨论过环境变量
的工作方式,现在用脚本实现它,并在脚本中调用另一脚本(这实际上创建了一个子进程)。
以下是两个脚本列表f a t h e r和c h i l d。
f a t h e r脚本设置变量f i l m,取值为A Few Good Men,并将变量信息返回屏幕,然后调用脚
本c h i l d,这段脚本显示第一个脚本里的变量f i l m,然后改变其值为Die Hard,再将其显示在屏
幕上,最后控制返回f a t h e r脚本,再次显示这个变量。
140 第三部分登录环境
下载
看看脚本显示结果。
因为在f a t h e r中并未导出变量f i l m,因此c h i l d脚本不能将f i l m变量返回。
如果在f a t h e r脚本中加入e x p o r t命令,以便c h i l d脚本知道f i l m变量的取值,这就会工作:
因为在脚本中加入了e x p o r t命令,因此可以在任意多的脚本中使用变量f i l m,它们均继承
了f i l m的所有权。
不可以将变量从子进程导出到文进程, 然面通过重定向就可做到这一点

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
118#
 楼主| 发表于 2006-8-13 19:02 | 只看该作者
14.4 位置变量参数
本章开始提到有4种变量,本地、环境,还有两种变量被认为是特殊变量,因为它们是只
读的。这两种变量即为位置变量和特定变量参数。先来看一看位置变量。
如果要向一个s h e l l脚本传递信息,可以使用位置参数完成此功能。参数相关数目传入脚
本,此数目可以任意多,但只有前9个可以被访问,使用s h i f t命令可以改变这个限制。本书后
面将讲到s h i f t命令。参数从第一个开始,在第9个结束;每个访问参数前要加$符号。第一个
参数为0,表示预留保存实际脚本名字。无论脚本是否有参数,此值均可用。
如果向脚本传送Did You See Th e Full Mo o n信息,下面的表格讲解了如何访问每一个参
数。
$ 0 $ 1 $ 2 $ 3 $ 4 $ 5 $ 6 $ 7 $ 8 $ 9
脚本名字Did Yo u S e e T h e F u l l M o o n
第14章环境和shell变量141
下载
14.4.1 在脚本中使用位置参数
在下面脚本中使用上面的例子。
这里只传递6个参数,7、8、9参数为空,正像预计的那样。注意,第一个参数表示脚本
名,当从脚本中处置错误信息时,此参数有很大作用。
下面的例子返回脚本名称。
注意$ 0返回当前目录路径,如果只返回脚本名,在b a s e n a m e命令下参数设为$ 0,刚好得
到脚本名字。
14.4.2 向系统命令传递参数
可以在脚本中向系统命令传递参数。下面的例子中,在f i n d命令里,使用$ 1参数指定查
找文件名。
142 第三部分登录环境
下载
另一个例子中,以$ 1向g r e p传递一个用户i d号, g r e p使用此i d号在p a s s w d中查找用户全
名。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
119#
 楼主| 发表于 2006-8-13 19:02 | 只看该作者
14.4.3 特定变量参数
既然已经知道了如何访问和使用s h e l l脚本中的参数,多知道一点相关信息也是很有用的,
有必要知道脚本运行时的一些相关控制信息,这就是特定变量的由来。共有7个特定变量,见
表1 4 - 2。
表14-2 特定s h e l l变量
$ # 传递到脚本的参数个数
$ * 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
$ $ 脚本运行的当前进程I D号
$ ! 后台运行的最后一个进程的进程I D号
$ @ 与$ #相同,但是使用时加引号,并在引号中返回每个参数
$ - 显示s h e l l使用的当前选项,与s e t命令功能相同
$ ? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
现在来修改脚本p a r a m并替换各种特定变量,与以前的例子不同,用不同的传递文本重新
运行脚本。
第14章环境和shell变量143
下载
特定变量的输出使用户获知更多的脚本相关信息。可以检查传递了多少参数,进程相应
的I D号,以免我们想杀掉此进程。
14.4.4 最后的退出状态
注意,$ ?返回0。可以在任何命令或脚本中返回此变量以获得返回信息。基于此信息,可
以在脚本中做更进一步的研究,返回0意味着成功,1为出现错误。
下面的例子拷贝文件到/ t m p,并使用$ ?检查结果。
现在尝试将一个文件拷入一个不存在的目录:
使用$ ?检验返回状态,可知脚本有错误,但同时发现c p:c a n n o t . . .,因此检验最后退出状
态已没有必要。在脚本中可以用系统命令处理输出格式,要求命令输出不显示在屏幕上。为
此可以将输出重定向到/ d e v / n u l l,即系统b i n中。现在怎样才能知道脚本正确与否?好,这时
可以用最后退出状态命令了。请看上一个例子的此形式的实际操作结果。
通过将包含错误信息的输出重定向到系统b i n中,不能获知最后命令返回状态,但是通过
使用$ !,(其返回值为1)可知脚本失败。
检验脚本退出状态时,最好将返回值设置为一个有意义的名字,这样可以增加脚本的可
读性。
144 第三部分登录环境
下载
14.5 小结
变量可以使s h e l l编程更容易。它能够保存输入值并提高效率。s h e l l变量几乎可以包含任
何值。特定变量增强了脚本的功能并提供了传递到脚本的参数的更多信息。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
120#
 楼主| 发表于 2006-8-13 19:03 | 只看该作者
第15章引号
上一章介绍了变量和替换操作,在脚本中执行变量替换时最容易犯的一个错误就是由于
引用错误。在命令行中引用是很重要的。
本章内容有:
• 引用的必要性。
• 双引、单引和反引号。
• 使用反斜线实现屏蔽。
15.1 引用必要性
这里只讲述引用的基本规则。因为使用引用的例子很多。本书接下来的两个部分将一一
予以讲述。脚本中执行行操作时, s h e l l将对脚本设置予以解释。要采取一种方法防止s h e l l这
样做,即使用引用号,包括各式引用或使用反斜线。
一些用户在对文本字符串进行反馈操作时觉得使用引用很麻烦。有时不注意,只引用了
一半,这时问题出现了。最好在反馈文本字符串时使用双引号。下面是各种引用的例子。
文本返回了,但由于未使用双引号, *被s h e l l误解,s h e l l认为用户要做目录列表。用双引
号得结果如下:
这样就不会有误解产生。表1 5 - 1列出各种引用类型。
表15-1 shell引用类型
" " 双引号` 反引号
' ' 单引号\ 反斜线
15.2 双引号
使用双引号可引用除字符$、`、\外的任意字符或字符串。这些特殊字符分别为美元符号,
反引号和反斜线,对s h e l l来说,它们有特殊意义。如果使用双引号将字符串赋给变量并反馈
它,实际上与直接反馈变量并无差别。
现在假定要设置系统时间输出到变量m y d a t e。
因为s h e l l将" "符号里的字符串赋予变量m y d a t e,d a t e已没有特定意义,故此变量只保存单
词d a t e。
如果要查询包含空格的字符串,经常会用到双引号。以下使用g r e p抽取名字“Davey Wi r e”,
因为没有加双引号, g r e p将“D a v e y”认作字符串,而把“Wi r e”当作文件名。
要解决这个问题,可将字符串加双引号。这样s h e l l会忽略空格,当使用字符时,应总是
使用双引号,无论它是单个字符串或是多个单词。
在一个反馈的文本行里可以使用双引号将变量引起来。下面的例子中, s h e l l反馈文本行,
遇到符号$,知道这是一个变量,然后用变量值b o y替换变量$ B O Y。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表