Linux操作系统-第十一章-shell程序设计2.ppt
《Linux操作系统-第十一章-shell程序设计2.ppt》由会员分享,可在线阅读,更多相关《Linux操作系统-第十一章-shell程序设计2.ppt(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十一章第十一章 shell程序设计程序设计主要内容主要内容11.1 shell11.1 shell概述概述11.2 shell11.2 shell变量变量11.3 shell11.3 shell的控制结构的控制结构11.4 shell11.4 shell应用实例应用实例11.5 11.5 小结小结 n nshell是一种命令语言,同时又是一种程序设是一种命令语言,同时又是一种程序设计语言。计语言。n nshell的语言处理能力,使得用户能够方便地的语言处理能力,使得用户能够方便地定义各种变量、参数,并使用各种控制语句编定义各种变量、参数,并使用各种控制语句编写复杂的命令程序完成多种工作。写复
2、杂的命令程序完成多种工作。n n本章介绍本章介绍shell、shell程序设计语言、程序设计语言、shell的运行环境及的运行环境及shell程序的实例。程序的实例。11.1 shell概述概述n n11.1.111.1.1什么是什么是shelln nshell是一种命令解释程序,是一种命令解释程序,shell解释用户解释用户输入的命令行,提交系统内核处理,并将结果输入的命令行,提交系统内核处理,并将结果返回给用户。一旦用户注册到系统后,返回给用户。一旦用户注册到系统后,shell就被系统装入内存,并一直运行到用户退出系就被系统装入内存,并一直运行到用户退出系统之止;而一般命令仅当被调用时,才
3、由系统统之止;而一般命令仅当被调用时,才由系统装入内存执行。装入内存执行。n nshell本身也是一种可编程的程序设计语言。本身也是一种可编程的程序设计语言。用用shell写的程序写的程序(shell脚本脚本)相当于相当于dos/windows下的批处理文件,它可以下的批处理文件,它可以简单到只有一条命令,也可以复杂到包括简单到只有一条命令,也可以复杂到包括大量循环、条件语句、数学运算、控制结大量循环、条件语句、数学运算、控制结构,也可以是介于两者之间的程序。构,也可以是介于两者之间的程序。n n11.1.211.1.211.1.211.1.2shellshell程序语言的特点程序语言的特点程
4、序语言的特点程序语言的特点n nshellshell允许通过编程来完成复杂的功能处理,但其作允许通过编程来完成复杂的功能处理,但其作允许通过编程来完成复杂的功能处理,但其作允许通过编程来完成复杂的功能处理,但其作为语言与高级语言相比较具有不同的特点:为语言与高级语言相比较具有不同的特点:为语言与高级语言相比较具有不同的特点:为语言与高级语言相比较具有不同的特点:(1)shell(1)shell是解释性的,多数高级语言是编译性的;是解释性的,多数高级语言是编译性的;是解释性的,多数高级语言是编译性的;是解释性的,多数高级语言是编译性的;(2)shell(2)shell语言与高级语言处理的对象不同
5、;语言与高级语言处理的对象不同;语言与高级语言处理的对象不同;语言与高级语言处理的对象不同;(3)shell(3)shell与系统有密切的关系;与系统有密切的关系;与系统有密切的关系;与系统有密切的关系;(4)shell(4)shell易编写、调试、灵活性较强,但速度低;易编写、调试、灵活性较强,但速度低;易编写、调试、灵活性较强,但速度低;易编写、调试、灵活性较强,但速度低;(5)shell(5)shell作为命令级语言,命令组合功能很强。作为命令级语言,命令组合功能很强。作为命令级语言,命令组合功能很强。作为命令级语言,命令组合功能很强。n n11.1.311.1.3bash的特点的特点n
6、 nshell有两种主要语法类型:有两种主要语法类型:Bourneshell和和Cshell,彼此不兼容。这里,我们再着重,彼此不兼容。这里,我们再着重介绍一下介绍一下bash的特点:的特点:n n(1)自动补全功能自动补全功能n n假设要输入的命令很长,或者命令后面要给的假设要输入的命令很长,或者命令后面要给的文件名很长。这个时候只要按一个文件名很长。这个时候只要按一个Tab键,键,bash就会在可能的命令或文件名里面找寻匹就会在可能的命令或文件名里面找寻匹配的命令,找到的话就会自动帮你补齐。配的命令,找到的话就会自动帮你补齐。n n(2)(2)命令行编辑程序命令行编辑程序命令行编辑程序命令
7、行编辑程序bashbash的命令行编辑是在提示符下,可对未执行的命的命令行编辑是在提示符下,可对未执行的命的命令行编辑是在提示符下,可对未执行的命的命令行编辑是在提示符下,可对未执行的命令字符任意地修改。令字符任意地修改。令字符任意地修改。令字符任意地修改。n n(3)(3)命令历史命令历史命令历史命令历史(commandhistory)(commandhistory)所谓的命令历史就是把曾经输入过的命令记录起来,所谓的命令历史就是把曾经输入过的命令记录起来,所谓的命令历史就是把曾经输入过的命令记录起来,所谓的命令历史就是把曾经输入过的命令记录起来,方便日后的查询与使用。只要按向上键就可以调出
8、方便日后的查询与使用。只要按向上键就可以调出方便日后的查询与使用。只要按向上键就可以调出方便日后的查询与使用。只要按向上键就可以调出前一个命令,再按一次向上键就可以调出更前一个前一个命令,再按一次向上键就可以调出更前一个前一个命令,再按一次向上键就可以调出更前一个前一个命令,再按一次向上键就可以调出更前一个命令,依此类推,用向下键可以回到下个命令,所命令,依此类推,用向下键可以回到下个命令,所命令,依此类推,用向下键可以回到下个命令,所命令,依此类推,用向下键可以回到下个命令,所以用上、下键就可以选择以前输入过的命令。以用上、下键就可以选择以前输入过的命令。以用上、下键就可以选择以前输入过的命
9、令。以用上、下键就可以选择以前输入过的命令。11.1.4 Shell程序的创建与执行程序的创建与执行n n用任一文本编辑器创建用任一文本编辑器创建shell文件文件(xxx)(例如:(例如:geditxxx)n n将将shell文件改为可执行文件文件改为可执行文件(例如:(例如:$chmodu+xxxx)n n执行执行shell文件文件(例如:(例如:$./xxx)11.1.5 Shell程序示例程序示例n n在在在在/home/test/home/test文件夹下运行文件夹下运行文件夹下运行文件夹下运行“附件附件附件附件”中中中中“文本文本文本文本编辑器编辑器编辑器编辑器”程序程序程序程序
10、geditgeditn n在新建空白文档中输入如下内容:在新建空白文档中输入如下内容:在新建空白文档中输入如下内容:在新建空白文档中输入如下内容:datedatepwdpwdlslsn n保存文件到保存文件到保存文件到保存文件到/home/test/xxx/home/test/xxx中中中中n n修改文件权限,运行修改文件权限,运行修改文件权限,运行修改文件权限,运行“系统工具系统工具系统工具系统工具”中中中中“终端终端终端终端”,输输输输入:入:入:入:chmodchmod u+xu+xxxxxxxn n输入输入输入输入./xxx./xxx11.2 shell变量变量n n11.2.1she
11、ll变量描述变量描述n nshell实际上是基于字符串的程序设计语言,实际上是基于字符串的程序设计语言,但也有变量。但也有变量。shell变量能够而且只能存储变量能够而且只能存储正文字符串,即它只有一种类型的变量即串正文字符串,即它只有一种类型的变量即串变量。变量。n n变量的名字必须以字母或下划线开头,可以变量的名字必须以字母或下划线开头,可以包括字母、数字和下划线。包括字母、数字和下划线。n n11.2.2用户自定义变量用户自定义变量n n用户自定义变量语法格式:用户自定义变量语法格式:name=string,赋值号,赋值号“=”两边不允许有空白符。两边不允许有空白符。n n例:例:nod
12、ehost=beijing.UUCPpath=/bin:/usr/bin:/etc/bincount=10n n允许多个赋值操作,按从右到左的顺序进行。允许多个赋值操作,按从右到左的顺序进行。n n例:例:#B=abcA=BC=OK#echoABCabcabcOKn n当引用一个未设置的变量时,其隐含值为空。当引用一个未设置的变量时,其隐含值为空。n n例:例:#echomailispathofmailboxispathofmailboxn n11.2.3shell中的特殊字符中的特殊字符n n1.双引号双引号(“”)n n如果用双引号如果用双引号“”将值括起来,则括起来将值括起来,则括起来的
13、字符串允许出现空格、制表符和换行符的字符串允许出现空格、制表符和换行符等特殊字符,而且允许有变量替换。等特殊字符,而且允许有变量替换。n n例例例例1 1:#MAIL=/#MAIL=/var/mail/fkvar/mail/fk#varvar=MAILispathofmailboxMAILispathofmailbox#echo#echovarvar/var/mail/fkvar/mail/fkispathofmailboxispathofmailboxn n例例例例2 2:#strstr=Thisis=Thisisnabooknabook#echo#echostrstrThisisThisi
14、sabookabookn n使用双引号能消除被括在双引号中的大部分特殊字符使用双引号能消除被括在双引号中的大部分特殊字符使用双引号能消除被括在双引号中的大部分特殊字符使用双引号能消除被括在双引号中的大部分特殊字符的含义,不能消除的字符有:、的含义,不能消除的字符有:、的含义,不能消除的字符有:、的含义,不能消除的字符有:、!、!、!、!、。n n例例例例1 1:#echoTypea#echoTypea*,please,pleaseTypeaTypea*,please,pleasen n例例例例2 2:#echo“todayisdate”#echo“todayisdate”n n例例例例3 3:
15、#echo“!3”#echo“!3”n n2.2.单引号单引号单引号单引号()()n n使用单引号消除被括在单引号中的所有特殊字符的含义,即使用单引号消除被括在单引号中的所有特殊字符的含义,即使用单引号消除被括在单引号中的所有特殊字符的含义,即使用单引号消除被括在单引号中的所有特殊字符的含义,即单引号表示内容照原样不动。单引号表示内容照原样不动。单引号表示内容照原样不动。单引号表示内容照原样不动。n n例例例例3 3:#BOOK=Englishbook#BOOK=Englishbook#MSG=MSG=BOOKBOOK#echoechoMSGMSG-echo$MSGecho$MSG#$BOOK
16、$MSG#$BOOK$MSG n n例例例例4 4:#msgmsg=Todayisdate=Todayisdate#echo#echomsgmsgTodayisdateTodayisdaten n3.反撇号反撇号()n n当一个字符串被括在反撇号当一个字符串被括在反撇号“”中时,该中时,该字符串将作为命令被字符串将作为命令被shell解释执行,即用解释执行,即用命令的执行结果替换这个字符串本身。要命令的执行结果替换这个字符串本身。要注意反撇号与单引号的区别。注意反撇号与单引号的区别。n n例例1:#lm=pwd#echolm/rootn n例例例例2 2:#now=date#now=date#
17、echo#echonownowdatedate#now=date#now=date#echo#echonownow19981998年年年年 1010月月月月 2828日日日日 星期三星期三星期三星期三 1717时时时时 5151分分分分 5656秒秒秒秒 CSTCSTn n例例例例3 3:#ethoetho“Hostname“Hostname:hostname”hostname”n n$()$()的功能与的功能与的功能与的功能与一样一样一样一样n n例例例例1 1:#now=$(date)#now=$(date)#echo$now#echo$nown n例例例例2 2:#echo$(#echo
18、$(pwdpwd)n n例例例例3 3:#ethoetho“Hostname“Hostname:$(hostname)”$(hostname)”n n4.转义符转义符()n n使用转义符消除单个字符的特殊含义,即使用转义符消除单个字符的特殊含义,即将紧跟在转义符后面的单个字符按字符本将紧跟在转义符后面的单个字符按字符本身的实际含义解释。身的实际含义解释。n n例例1:#echoyourcostis$5.00#echo“yourcostis$5.00”#echoyourcostis$5.00n n例例例例2 2:转义符具有续行功能:转义符具有续行功能:转义符具有续行功能:转义符具有续行功能#ls
19、ls-l-l#lsls-l-ln n例例例例3 3:echo*00000*echo*00000*echoecho*00000*00000*echo“*00000*”echo“*00000*”echo*00000*echo*00000*n n5.大括号大括号n n引用变量的值时,可以用花括号引用变量的值时,可以用花括号将变量名将变量名称括起来,使变量名称与它的后续字符分隔称括起来,使变量名称与它的后续字符分隔开,如果紧跟在变量名称后面的字符是字母、开,如果紧跟在变量名称后面的字符是字母、数字或下划线时,必须要使用花括号。数字或下划线时,必须要使用花括号。n n例例1:#num=2#echothi
20、sisthe$numnd#echothisisthe$numndn n例例例例2 2:#strstr=Thisisastring=Thisisastring#echo#echo strentstrenttestofvariablestestofvariablesThisisastringenttestofvariablesThisisastringenttestofvariables#echo#echostrentstrenttestofvariablestestofvariablestestofvariablestestofvariablesn n11.2.4常用命令常用命令n n1.ech
21、o命令命令显示变量内容显示变量内容#echo$variablen n2.env命令命令显示目前系统中主要的预设变量内容显示目前系统中主要的预设变量内容#envn n3.set命令命令n n显示目前系统中全部的变量内容显示目前系统中全部的变量内容#setn n4.unset命令命令直接将该变量的内容拿掉:直接将该变量的内容拿掉:#unset变量名变量名n n5.export5.export命令命令命令命令#test=game#test=game#echo$test#echo$test#bash#bash进入子进入子进入子进入子shellshell#echo$test#echo$test显示结果将
22、为空显示结果将为空显示结果将为空显示结果将为空#exit#exit退出子退出子退出子退出子shellshell#exporttest#exporttest#bash#bash#echo$test#echo$testgamegamen n6.alias6.alias命令命令命令命令n n命令别名是一个很有趣的东西,特别是你的惯用指命令别名是一个很有趣的东西,特别是你的惯用指命令别名是一个很有趣的东西,特别是你的惯用指命令别名是一个很有趣的东西,特别是你的惯用指令特别长的时候!还有,增设预设的属性在一些惯令特别长的时候!还有,增设预设的属性在一些惯令特别长的时候!还有,增设预设的属性在一些惯令特别
23、长的时候!还有,增设预设的属性在一些惯用的指令上面,可以预防一些不小心误杀档案的情用的指令上面,可以预防一些不小心误杀档案的情用的指令上面,可以预防一些不小心误杀档案的情用的指令上面,可以预防一些不小心误杀档案的情况发生的时候!况发生的时候!况发生的时候!况发生的时候!#alias#alias#aliaslm=#aliaslm=lsls-al|less-al|less#aliash=history#aliash=historyn n如果要取消命令别名的话,就使用如果要取消命令别名的话,就使用如果要取消命令别名的话,就使用如果要取消命令别名的话,就使用 unaliasunalias!n n7.r
24、ead7.read命令命令命令命令n n上面讲的上面讲的上面讲的上面讲的变量变量变量变量都是直接设定好的!那么可不可都是直接设定好的!那么可不可都是直接设定好的!那么可不可都是直接设定好的!那么可不可以让变量内容是由使用者由键盘输入呢!可以使用以让变量内容是由使用者由键盘输入呢!可以使用以让变量内容是由使用者由键盘输入呢!可以使用以让变量内容是由使用者由键盘输入呢!可以使用 readread来达成!这个命令在脚本里面比较重要的!来达成!这个命令在脚本里面比较重要的!来达成!这个命令在脚本里面比较重要的!来达成!这个命令在脚本里面比较重要的!n n#readname#readnametestin
25、g=testing=这个时候屏幕会等待使用者由键盘输这个时候屏幕会等待使用者由键盘输这个时候屏幕会等待使用者由键盘输这个时候屏幕会等待使用者由键盘输入!入!入!入!#echo$name#echo$nametesting=testing$0echoThisscriptsname=$0echoparameters$1$2$3echoparameters$1$2$3 n n#shshtest11-1.shpa1pa2pa3test11-1.shpa1pa2pa3Thisscriptsname=test11-1.shThisscriptsname=test11-1.shparameterspa1pa2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 操作系统 第十一 shell 程序设计
限制150内