(精品)Shell编程.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《(精品)Shell编程.ppt》由会员分享,可在线阅读,更多相关《(精品)Shell编程.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2005博创科技北北 京京 博博 创 兴 业 科科 技技 有有 限限 公公 司司BEIJNG UNIVERSAL PIONEERING TECHNOLOGY Co.,LTD博创科技 嵌入互动Linux开发基础原仓周博创科技 嵌入互动2006博创科技第三章Shell编程Shell的工作原理Shell的种类在Bash中的操作Shell的登录环境环境和Shell变量基础Shell编程博创科技 嵌入互动2006博创科技什么是shellShell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;
2、作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其它程序向Linux传递命令时,内核会做出相应的反应。shell是一个命令语言解释器,它拥有自己内建的shell命令
3、集,shell也能被系统中其它应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。Shell命令有两种形式:内部命令,存在于内存中,比如cd。外部命令,存在于文件系统中某个目录下的单独的程序,例如cp、rm博创科技 嵌入互动2006博创科技shell的工作原理Linux系统Shell的启动过程:1)内核(/unix,/vmunix,/boot/zImage等)将加载至内存,直到系统关机;2)init将扫描/etc/inittab(inittab列出可用的终端及其属性),一旦找到活动的终端,mingetty会给出login提示符和口令,mingetty提示输入用户
4、及口令;3)将用户名及口令传递给login,login验证用户及口令是否匹配,如果身份验证通过,login将会自动转到其$HOME;4)将控制权移交到所启动的任务(在移交之前分别完成setgid,setuid).如在/etc/passwd文件中用户的shell为/bin/sh。5)读取文件/etc/profile和$HOME/.profile中系统定义变量和用户定义变量,系统给出shell提示符$PROMPT,对普通用户用$作提示符,对超级用户(root)用#作提示符。6)在shell提示符,就可以键入命令名称(或shell程序)及所需要的参数。shell将执行这些命令。如果一条命令花费了很长
5、的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它。7)当用户准备结束登录对话进程时,可以键入logout命令、exit命令或按ctrl+d,结束后控制权将交给init。博创科技 嵌入互动2006博创科技Linux的启动过程博创科技 嵌入互动2006博创科技shell的种类shell有多种类型,最常用的几种是Bourneshell(shbash)、Cshell(cshtcsh)和Kornshell(ksh)。三种shell各有优缺点:Bourneshell是UNIX最初使用的shell,并且在每种UNIX上都可以使用。Bourneshell在shell编
6、程方面相当优秀,但在处理与用户的交互方面做得不如其它几种shell。Linux操作系统缺省的shell是BourneAgainshell,它是Bourneshell的扩展,简称Bash,与Bourneshell完全向后兼容,并且在Bourneshell的基础上增加、增强了很多特性。它可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多Cshell和Kornshell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。Cshell是一种比Bourneshell更适于编程的shell,它的语法与C语言很相似。Tcsh是Cshell的一个扩展版本。Tcsh包括命令行编辑、可编程单词
7、补全、拼写校正、历史命令替换、作业控制和类似C语言的语法,它不仅和Bashshell是提示符兼容,而且还提供比Bashshell更多的提示符参数。Kornshell集合了Cshell和Bourneshell的优点并且和Bourneshell完全兼容。Linux系统提供了pdksh(ksh的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。Linux还包括了一些流行的shell如ash、zsh等。博创科技 嵌入互动2006博创科技在Bash中的操作技巧(1/2)Bash命令行具有命令和文件名扩展特性当输入一个还没完成的命令或文件名时,只需键入Tab键就能激活命令和文件名扩展特
8、性,从而完成该命令的剩余输入。$catmy$catmyfileBash也能列出当前目录下部分匹配的文件名来完成文件名扩展。如果键入Esc,然后键入?,shell将列出所有与输入的字符串相匹配的文件名。$lsdocumentdocudrama$catdocdocumentdocudrama$catdocudrama博创科技 嵌入互动2006博创科技在Bash中的操作技巧(2/2)命令行编辑在Bash中可以对命令行进行编辑,以便用户在执行所键入的命令之前能够修改所键入的命令。如果在键入命令时出现拼写错误,只需在运行所键入的命令之前,使用编辑命令来纠正编辑错误,然后执行它,而不用重新输入整行命令命令
9、历史在Bash中,history命令能够保存最近所执行的命令。这些命令的历史记录号从1开始,只有有限个命令可以被保存起来,最多500个。要查看最近执行的命令,只要键入history命令。最简便的方法就是利用上下箭头键,把先前的事件逐次显示到命令行。按动一下上箭头键,那么上一次执行的一个事件就将出现在命令行上,再按一下,上一次的前一事件又会出现在命令行上;按动一下下箭头键,将会使当前事件的下一事件出现在命令行上。还有一个查询和执行历史事件的命令!命令。在!命令后键入与历史事件相关联的字符,这个关联字符可以是历史事件的历史事件号,也可以是该事件的前几个字符。博创科技 嵌入互动2006博创科技登录环
10、境Shell的另一个重要功用是提供个人化的使用者环境,这通常在shell的初始化文件中完成(.bash_profile、.profile、.login、.cshrc、.tcshrc等等)。这些文件包括了设定终端键盘和定义窗口的特征;设定环境变量,定义搜寻路径、权限、提示符号和终端类型;以及设定特殊应用程序所需要的变量,例如窗口、文字处理程序、及程序语言的链接库。Kornshell和Cshell加强了个性化的能力:增加历史、别名、和内建变量集以避免使用者误删文档。登录系统时,在进入命令提示符前。需键入用户名和密码,系统需查询/etc/passwd文件检查是否为有效用户,如果登录名正确并且密码有效
11、,启动/etc/passwd文件规定的shell,即登录成功。登录成功后,系统执行两个环境设置文件,第一个是/etc/profile,第二个是位于用户根目录下.bash_profile或.profile。系统还会处理其他的初始化文件。/etc/profile文件:用户登录时,自动读取/etc目录下profile文件,包含:全局或局部环境变量、PATH信息、终端设置、安全命令、日期信息或放弃操作信息等信息。用户的$HOME/.bash_profile:/etc/profile文件执行后,用户将执行自己的$HOME目录中的.bash_profile博创科技 嵌入互动2006博创科技shell程序的
12、变量和参数像高级程序设计语言一样,shell也提供说明和使用变量的功能。shell变量可以保存诸如路径名、文件名或者一个数字。对shell来讲,所有变量的取值都是一个字符串。shell程序采用$var的形式来引用名为var的变量的值。Shell有以下几种基本类型的变量:用户定义的变量shell定义的环境变量位置参数预定义变量参数置换的变量博创科技 嵌入互动2006博创科技用户定义的变量(1/2)定义自己的变量变量名=变量值或$变量名=变量值在定义变量时,变量名前不应加符号“$”,在引用变量的内容时则应在变量名前加“$”;在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字
13、符串都要用双引号括起来。说明一个变量为只读readonly变量名变量默认都只是当前shell的局部变量,将变量成为公共变量的格式为:export变量名也可以在给变量赋值的同时使用export命令:export变量名=变量值使用export说明的变量,在shell以后运行的所有命令或程序中都可以访问到博创科技 嵌入互动2006博创科技用户定义的变量(2/2)显示变量使用echo命令可以显示单个变量取值,并在变量名前加$,例如:$myvar=howareyou$echo$myvar清除变量使用unset命令清除变量。unsetvarname显示所有本地shell变量使用set命令显示所有本地定义的
14、shell变量博创科技 嵌入互动2006博创科技shell定义的环境变量shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,这些变量用户还可以重新定义。环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在.bash_profile或/etc/profile文件中设置了环境变量。传统上,所有环境变量均为大写。设置环境变量VARNAME=value;exportVARNAME显示环境变量使用env命令可以查看所有的环境变量。清除环境变量使用unset命令清除环境变量。博创科技 嵌入互动2006博创科技常用的shell环境变量HOME:用于保存注册目录的完全路径名。PATH
15、:用于保存用冒号分隔的目录路径名,shell将按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。$PATH=$HOME/bin:.:/bin:/usr/bin;exportPATHTERM:终端的类型。UID:当前用户的标识符,取值是由数字构成的字符串。PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化。PS1:主提示符,在特权用户下,缺省的主提示符是#,在普通用户下,缺省的主提示符是$。PS2:在shell接收用户输入命令的过程中,如果用户在输入行的末尾输入然后回车,或者当用户按回车键时shell判断出用户输入的命令没有结束时,显示这个
16、辅助提示符,提示用户继续输入命令的其余部分,缺省的辅助提示符是。IFS:IFS用作shell指定的缺省域分隔符。原理上讲域分隔符可以是任意字符,但缺省通常为空格、tab键。LOGNAME:此变量保存登录名。SHELL:SHELL变量保存缺省shell,通常在/etc/passwd中已设置博创科技 嵌入互动2006博创科技位置参数位置参数是一种在调用shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。$0是一个特殊的变量,它的内容是当前这个shell程序的文件名,所以,$0不
17、是一个位置参数,在显示当前所有的位置参数时是不包括$0的博创科技 嵌入互动2006博创科技预定义变量预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量,所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义所有预定义变量都是由$符和另一个符号组成的,常用的shell预定义变量有:$#:位置参数的数量$*:所有位置参数的内容$?:命令执行后返回的状态$:当前进程的进程号$!:后台运行的最后一个进程号$0:当前执行的进程名其中,$?用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)。$变量最常见的用途是用作临时
18、文件的名字以保证临时文件不会重复博创科技 嵌入互动2006博创科技参数置换的变量(1/2)shell在遇到未设置的变量时,将其值作为空串处理。而在实际应用中,对未设置的变量,用户可以根据需要采用不同的处理方式,这可通过变量替换来实现。变量替换提供了三种功能:允许替换未设置变量的隐含值;允许对未设置变量赋值;在访问未设置变量时,提示出错信息。博创科技 嵌入互动2006博创科技参数置换的变量(2/2)参数置换的变量有四种,这些变量通常与某一个位置参数相联系,根据指定的位置参数是否已经设置类决定变量的取值,它们的语法和功能分别如下。a.变量=$参数-word:如果设置了参数,则用参数的值置换变量的值
19、,否则用word置换。b.变量=$参数=word:如果设置了参数,则用参数的值置换变量的值,否则把变量设置成word然后再用word替换参数的值。注意,位置参数不能用于这种方式,因为在shell程序中不能为位置参数赋值。c.变量=$参数?word:如果设置了参数,则用参数的值置换变量的值,否则就显示word并从shell中退出,如果省略了word,则显示标准信息。这种方式常用于出错指示。d.变量=$参数+word:如果设置了参数,则用word置换变量,否则不进行置换。所有这四种形式中的参数既可以是位置参数,也可以是另一个变量,只是用位置参数的情况比较博创科技 嵌入互动2006博创科技引号引用必
20、要性在shell中所使用的许多特殊符号也可为其他目的所使用,因此当不需要引用这些字符的特殊含义时,就必须引用加以删除。例如$echohowareyou*文本返回了,但由于未使用双引号,*被shell误解,shell认为用户要做目录列表。采用双引号就不会有误解产生。$echohowareyou*shell引用类型:双引号单引号反引号反斜线博创科技 嵌入互动2006博创科技双引号使用双引号可引用除字符$、“外的任意字符或字符串。这些特殊字符分别为美元符号,反引号,反斜线和双引号,对shell来说,它们有特殊意义。如果使用双引号将字符串赋给变量并反馈它,实际上与直接反馈变量并无差别。$string=
21、goodafternoon$echo$stringgoodafternoon博创科技 嵌入互动2006博创科技单引号单引号将消除被括在单引号中的所有特殊字符的含义。$g=test$echothisis$gthisistest$echo$g$g博创科技 嵌入互动2006博创科技反引号反引号用于设置系统命令的输出到变量。shell将反引号中的内容作为一个系统命令,并执行其内容。使用这种方法可以替换输出为一个变量。反引号可以与双引号结合使用。$echotodayisdatetodayisSunApr2814:21:35CST2002$echotodayisdatetodayisdate博创科技 嵌入
22、互动2006博创科技反斜线(转义符)如果下一个字符有特殊含义,反斜线防止shell误解其含义,即屏蔽其特殊含义。下述字符包含有特殊意义:&*+$|?。假定echo命令加*,意即以串行顺序打印当前整个目录列表,而不是一个星号*。为屏蔽星号特定含义,可使用反斜线。$echo*在打印字符串时要加入八进制字符(ASCII相应字符),必须在前面加反斜线,否则shell将其当作普通数字处理。$echo-ethisisacopyright250signthisisacopyrightsign博创科技 嵌入互动2006博创科技特殊字符串引用的例外引用双引号、单引号和转义符都不能消除对echo命令有特殊功能的控
23、制的特殊含义。b退格c显示后不换行f在终端上屏幕的开始处显示n换行r回车t制表符v垂直制表符反斜线博创科技 嵌入互动2006博创科技shell脚本介绍使用shell脚本的原因脚本内容运行shell程序的方法博创科技 嵌入互动2006博创科技使用shell脚本的原因shell脚本在处理自动循环或大的任务方面可节省大量的时间,且功能强大。如果你有处理一个任务的命令清单,不得不一个一个敲进去,然后观察输出结果,再决定它是否正确,如果正确,再继续下一个任务,否则再回到清单一步步观察。一个任务可能是将文件分类、向文件插入文本、迁移文件、从文件中删除行、清除系统过期文件、以及系统一般的管理维护工作等等。创
24、建一个脚本,在使用一系列系统命令的同时,可以使用变量、条件、算术和循环快速创建脚本以完成相应工作。这比在命令行下一个个敲入要节省大量的工作时间。shell脚本可以在行命令中接收信息,并使用它作为另一个命令的输入。博创科技 嵌入互动2006博创科技脚本内容脚本第一行总是以#!/bin/bash开始,这段脚本通知shell使用系统上的BourneAgainshell解释器。注释行需要此行的第一个字符为#,解释器对此行不予解释。在第二行注释中写入脚本名是一个好习惯。#!/bin/sh#对变量赋值:a=helloworld#现在打印变量a的内容:echoAis:echo$a博创科技 嵌入互动2006博
25、创科技运行shell程序的方法shshell程序文件名。这种方法的命令格式为:bashshell程序文件名这实际上是调用一个新的bash命令解释程序,而把shell程序文件名作为参数传递给它。新启动的shell将去读指定的文件,执行文件中列出的命令,当所有的命令都执行完结束。该方法的优点是可以利用shell调试功能。用chmod命令使shell程序成为可执行的一个文件能否运行取决于该文件的内容本身可执行且该文件具有执行权。对于shell程序,当用编辑器生成一个文件filename时,需给予执行权限:chmod+xfilename当用户需要运行这个文件时,只需要直接键入文件名即可。./filen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 Shell 编程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内