没有合适的资源?快使用搜索试试~ 我知道了~
首页sh,ksh,csh介绍.pdf
sh,ksh,csh介绍.pdf
1星 需积分: 50 19 下载量 56 浏览量
更新于2023-03-16
评论
收藏 2.22MB PDF 举报
Bourne shell(s h)、C shell(c s h)以及Korn shell(k s h)是命令解释程序及高级编程语言
资源详情
资源评论
资源推荐
下载
第10章 shell II (sh)
Bourne shell(s h)、C shell(c s h )以及Korn shell(k s h )是命令解释程序及高级编程语言。
作为命令解释程序,这些s h e l l处理用户在命令行提示符下所输入的命令。当用户把一个 s h e l l作
为一种编程语言使用时,s h e l l处理存储在称为s h e l l脚本的文件中的一组的命令。与其他语言一
样,s h e l l具有变量和控制流命令(例如f o r循环和i f语句)。
使用s h e l l,用户可以自定义工作环境。可以使自己的提示符显示工作目录名,为 c p命令创
建一个函数或者别名,以防止它覆盖文件,另外还可以利用关键字变量来改变s h e l l 的工作方式,
等等。用户也可以编写s h e l l 脚本来做希望的事情:从存储了一个长而复杂命令的单行脚本(可
以使用户不必再输入它们)到运行一系列报告(为这些报告自动生成参数),然后打印它们,
并在作业完成的时候发信提醒用户。另外更复杂的 s h e l l脚本则本身就作为程序,它们不仅仅运
行其他的程序(参见第11、1 2和1 3章的示例)。
通常情况下,用户的根s h e l l总是单用户模式的Bourne shell 。所有的系统s h e l l脚本都编写
为在Bourne shell下运行
—
如果用户在单用户模式下进行工作(或者是在引导系统的过程中,
或者是进行系统维护、管理或修复工作),这是个不错的主意,至少可以熟悉这个s h e l l。
提示 本章覆盖哪种s h e l l 本章内容倾向于Bourne shell,并使用注意事项和参考页来
说明与C shell或Korn shell不同的地方。特别是1 0 . 2 节、1 0 . 3 节及1 0 . 6 节的内容,既适
用于Bourne shell,同样也适用于C shell和Korn shell。
作业控制 1 0 . 5节不适用于Bourne shell,因为s h不支持作业控制。Job shell(jsh)等
同于Bourne shell,但是支持作业控制的完全实现。如果用户想尝试作业控制命令,要
确保用户正在运行j s h 而不是s h 。c s h和k s h也支持作业控制,并且用户也可以使用它们
进行尝试。
如果用户都不熟悉这些s h e l l 用户可能想推迟阅读本章的1 0 . 5节“作业控制”和
本节,直到用户能够熟悉创建并运行简单的 s h e l l脚本。无论怎样,用户应该阅读 1 0 . 7
节“参数和变量”。除了用户创建的变量, s h e l l维持了几个关键字变量,这些变量控
制着s h e l l的重要的特性。
s h e l l编程 因为许多用户相对于c s h 编程语言来说,更喜欢使用 Bourne shell编程
语言,并且由于Bourne shell与Korn shell编程语言共享了许多通常的特性,所以本章
和接下来的一章详细描述了s h (和k s h)编程。
用户可以使用其他的s h e l l,但这并不是一个好主意。 Bourne shell是唯一静态连接的s h e l l(/ s b i n / s h e e l l)。如
果用户的计算机崩溃而且 / u s r文件系统不可用或者一些系统库遭到破坏,则没有其他的 s h e l l 可以工作:用户
将不能引导用户的系统并试图修复破坏的部分,因为用户没有一个可用的 s h e l l。如果用户想使用另一种s h e l l,
可以当系统处于单用户模式时来启动它。
10.1 Bourne shell 背景
Bourne shell是一个早期的UNIX shell,这个s h e l l是AT & T的贝尔实验室的Steve Bourne所编
写的。经过这些年,Bourne shell已经被扩展,并且仍然是与 U N I X许多商业版本一起提供给用
户的基本的s h e l l。由于Bourne shell悠久而成功的历史,许多帮助用户管理和使用 S o l a r i s的s h e l l
脚本都是使用Bourne shell写的。
POSIX shells
P O S I X 标准化组织已经为s h e l l 功能定义了一个标准(POSIX 1003.2)。Bourne shell提供了
符合这个P O S I X标准所要求的功能。
10.2 创建一个简单的s h e l l脚本
一个s h e l l脚本是一个包含s h e l l能够执行的命令的文件。在一个 s h e l l 脚本中的命令可以是用
户在一个s h e l l提示中输入的任何命令。例如,在一个 s h e l l脚本中的命令可能运行一个 S o l a r i s命
令,一个用户所编写的编译程序,或者是其他的s h e l l 脚本。当使用用户在命令行给出的命令时,
s h e l l脚本中的命令可以使用模糊文件引用,并能将输入重定向为来自一个文件或将输出重定向
到一个文件或通过一个管道运送。用户也可以使用管道和以脚本做为输入和输出的重定向。
除了用户通常在命令行中使用的命令外,还有一组命令,即控制流命令(也称为控制结构,
control structure),这组命令大多数应用在s h e l l脚本中。当用户想使用一个典型的结构化编程语
言来更改命令的执行顺序时,那么控制流命令可以使用户更改一个脚本中的命令的执行顺序。
运行一个s h e l l脚本的最简单的方法是在命令行中给出它的文件名。然后这个 s h e l l在脚本中
一个接一个地解释并执行这个命令。通过使用 s h e l l脚本,用户可以简化并快速地开始一个复杂
的任务序列或者一个重复的过程。
使用c h m o d 使文件可执行
就像使用一个命令一样,通过给出一个 s h e l l脚本名字就可以执行它,但用户必须对包含这
个脚本的文件具有读和执行的权限。执行权限告诉 s h e l l和系统,文件的所有者、组或者公共用
户具有执行此文件的权限。它同时也暗示了此文件的内容是可执行的。
当用户使用一个编辑器(例如 v i )来创建一个s h e l l 脚本时,文件没有执行权限的设置。下
面的示例显示了一个文件w h o s o n ,这是一个包含三个命令行的s h e l l脚本。当用户最初创建一个
文件,如w h o s o n ,用户不能像给出一个命令一样通过给出它的名字就执行它,因为用户还没
有执行的权限。
第1 0 章 shell II (sh)计计319
下载
s h e l l不能将w h o s o n 识别为一个可执行的文件,并且当用户试图执行它时给出一个错误消息。
用户可以通过给出这个文件名作为s h (sh whoson)的一个参数来执行它。当用户这么做时,s h
将这个参数作为一个s h e l l脚本并且执行它。在这种情况下,s h是可执行的,并且w h o s o n作为s h
所执行的一个参数,所以用户不必具有执行 w h o s o n的权限。用户可以使用c s h 和k s h 完成同样的
事情。
用户可以使用c h m o d 命令来改变与一个文件相关联的访问权限。图 1 0 - 1 展现了使用- l选项
的l s命令所列出的在使用c h m o d 命令给用户执行权限之前及之后w h o s o n文件的许可权限。
图10-1 使用c h m o d命令来使得一个s h e l l脚本可执行
第一个l s 命令显示了一个连字符(-)作为第四个字符,指出了所有者没有执行这个文件的
权限。然后,c h m o d命令使用一个参数赋予文件所有者执行权限。 u + x使得c h m o s命令增加(+)
可执行权限(x)给所有者(u)(u代表u s e r ,尽管实际上u是指文件的所有者,这个所有者可
能会是任意时刻的文件使用者)。第二个参数是文件的名字。第二个 l s 命令在第四个字符的位
置显示了一个x,指出了所有者现在具有了执行的权限。
如果其他用户要执行这个文件,用户也必须改变组和(或)公共用户的访问权限。任何用
户想使用文件名作为一个命令,就必须对这个文件具有执行权限。如果这个文件是一个 s h e l l脚
本(一个s h e l l命令文件),那么试图执行这个文件的用户也必须对这个文件具有读权限。用户
不需要读访问权限来执行一个二进制可执行的文件(已编译的程序)。
最后,当文件名作为一个命令给出时, s h e l l将执行这个文件。如果用户在 s h e l l提示符下输
入w h o s o n,并且得到whoson:command not found之类的错误消息时,表示用户的登录s h e l l 没有
被设置成为可在工作目录中搜索可执行的文件。这时可以试着使用以下命令:
$ . / w h o s o n
. /明确地告诉了s h e l l 在工作目录中寻找一个可执行文件。为了改变用户的环境以便 s h e l l查
找这个工作目录,可以参考第1 0 . 7 . 2 节的PAT H变量。
现在,用户知道了如何写简单的 s h e l l脚本并执行它。接下来的两节内容描述了一些功能,
当用户在命令行或在一个脚本内运行命令时,这些功能很有用。 另外,1 0 . 5节解释了命令、
s h e l l脚本以及S o l a r i s系统进程之间的关系。它同时也说明了一个 s h e l l脚本是如何被调用并运行
320计计第二部分 S o l a r i s中、高级知识
下载
无执行访问权限
所有者有执行访问权限
的,另外还描述了它运行的环境。
10.3 命令分隔及组合
当用户输入s h e l l 命令或者编写一个s h e l l 脚本时,用户必须将命令一个一个分隔开。本节回
顾了第5章所包括的进行命令分隔的有关方法,并且介绍了几个新的方法。本节同样适用于
Bourne shell、C shell及Korn shell。
10.3.1 使用“;”和NEWLINE 分隔命令
N E W L I N E字符是一个独特的命令,因为它可以启动位于它之前的命令的执行过程。在这
本书中,每次用户在一个命令行的末尾按R E T U R N 键时,便可以看到这一点。
分号(;)是一个命令分隔符号,这个分隔符号不能启动一个命令的执行程序,也不改变
命令的行为表现。用户可以通过在单个命令行中输入一系列的命令并且使用分号(;)来分隔
命令,从而按顺序执行这些命令。为了启动命令序列的执行程序,用户必须使用 R E T U R N键来
作为命令行的终止符。
$ x; y; z
如果以上的x、y和z是命令,那么前面的命令行将产生与下面三个命令行相同的结果。不
同之处是在下面的示例中, s h e l l在每一个命令(x、y和z)结束执行之后产生一个提示,而前
面的命令行使得s h e l l 只在z命令完成之后产生一个提示。
$ x
$ y
$ z
尽管在前面示例中的分号周围的空格使命令行更容易阅读,但是这是不必要的。命令分隔
符号不需要被S PA C E或TA B 键所包围。
10.3.2 使用 \ 继续一个命令
当用户正在输入一个非常长的命令行,并且用户已经到了用户显示屏幕的最右边时,用户
可以使用一个反斜杠( \)字符来在下一行中继续此命令。反斜杠引用或者转义了跟在它后面
的N E W L I N E字符,以便s h e l l不会将它视为命令的终止符。
10.3.3 使用|和& 分隔命令并完成其他事情
其他的命令分隔符是管道符号( |)和后台任务符( &)。这些命令分隔符不能启动命令的
执行过程,而是改变命令的一些行为表现。管道符号可以更改标准输入的来源或标准输出的目
的地,而后台任务符使s h e l l在后台执行这项任务,这样用户能立刻得到返回的提示符,并可以
继续其他的工作。
下面的每一个命令行都将启动包含三项任务的一个作业:
第1 0章 shell II (sh)计计321
下载
在第一项作业中,s h e l l 将任务x的输出定向到任务y,并将y的输出定向到z。由于s h e l l 在前
台运行整个的作业,所以用户直到任务 z运行完后才得到返回的提示符(并且任务 z直到任务y
结束之后才结束,而任务 y直到任务x结束之后才结束)。在第二项作业中, x是一个ls -l命令,
任务y是grep tmp命令,而任务z是标页符命令,p g 。用户以一个长的(宽的)列表结束,这个
列表是工作目录中所有文件的文件名列表,它包含了字符串 t m p ,通过p g命令进行管道运输。
下一个命令行在后台执行任务 d和任务 e,在前台执行任务 f。这个 s h e l l 显示了方括号
(j s h , c s h , k s h)之间的作业编号以及为每一个后台运行的进程分配的 P I D(进程标识符)号。f命
令一结束,用户就可以得到一个返回的提示符。
在s h e l l为一个新的命令显示一个提示符之前,它检查是否有后台作业已经完成。对于每一
个已经完成的作业,s h e l l(j s h , c s h , k s h)将显示它的作业编号,即字样 D o n e以及调用此作业的
命令行;然后s h e l l将显示提示符。当作业编号被列出时,最后一个开始的作业的作业编号后面
跟着一个加号(+),而前面的作业的作业编号后面跟着一个减号(-)。任何列出来的其他作业
将显示一个S PA C E字符。在运行了最后一个命令之后,s h e l l 在产生提示符之前,显示下面的信
息:
下面的命令行全部在后台执行所有的三项任务。用户可以立即得到一个 s h e l l提示符:
用户可以使用管道来从一个任务发送输出结果到接下来的任务中,并且使用 &符号来将整
个作业作为一个后台任务运行。提示符将再次立即返回。 s h e l l 将以一个管道连接的命令看作是
单一的作业。所有的管道都被s h e l l 看作是单一的作业,而不管使用管道符( |)连接了多少个任
务以及它们有多么复杂。 C shell显示了放置在后台中的三个进程(所有的进程都属于作业 1)。
这个作业和Korn shells仅仅显示一个进程。
选读内容
用户可以演示正在前台和后台运行的连续的和同时发生的进程。创建名为 a、b和c的可
执行文件,并且类似于以下对文件 a的操作那样对每个文件使用 e c h o (s h , c s h , k s h)命令来回
322计计第二部分 S o l a r i s中、高级知识
下载
剩余39页未读,继续阅读
xiaoyao80910
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1