编程SHELL编程简介_第1页
编程SHELL编程简介_第2页
编程SHELL编程简介_第3页
编程SHELL编程简介_第4页
编程SHELL编程简介_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

shell编程-shell编程简介介绍shell编程目标:达成这一章,你能做以下事情:写出简单的shell程序经过环境变量传达参数给经过地点参数传达参数给

shellshell

程序程序使用特别shell变量,*和#使用shift和read命令1.1shell编程概括shell程序是一个包括UNIX命令的一般文件。这个文件的同意权限起码应当为可读和可履行。在shell提示符下键入文件名便可履行

shell

程序。shell

程序能够经过三种方式接受数据:shell是一个命令解说器,它会解说并履行命令提示符下输入的命令。可是,你可能想要多次履行一组命令,shell供给了一种功能,让你将这组命令寄存在一个文件中,而后你能够象unix系统供给的其余程序相同履行这个文件,这个命令文件就叫做shell程序或许shell脚本。当你运转这个文件,它会象你在命令行输入这些命令相同地履行这些命令。为了让shell能读取而且履行你的shell程序,shell脚本的文件权限一定被设置为可读和可履行。为了让shell能够找到你的程序,你能够选择输入完全路径名,或许将这个脚本的路径放在于你的PATH环境变量指定的路径列表中。很多的用户会在他们的HOME目录下创立一个bin目录来寄存他们自己开发的script,而后将$HOME/bin加入到他们的PATH环境变量中。你能够写出特别复杂的shell脚本,因为shell脚本支持变量、命令行参数、交互式输入、tests(判断))、branches(分支),和loops(循环)等复杂的构造。1.2shell程序举例$catmyprog#thisistheprogrammyprogdatels–F$myprog要创立一个shell程序,考虑进行以下步骤:$vimyprogshell命令的程序。thisistheprogrammyprogdatels–F$chmod+xmyprog增添文件的履行模式$myprogThuJul1111:10EDT1994F1f2memo/myprog*第一使用一个文本编写器创立一个shell程序myprog。在程序履行以前,这个文件一定被给予可履行的权限。而后在命令提示符下输入这个程序名,如上例所示,当myprog履行的时候,一个子shell读取输入而不是从命令行读取输入,

会被创立。这个子shell会从shell程序言件myprog这个shell中的每个命令的履行都会创立一个子shell。一旦所有的命令都被履行,所有的子shell会中断,而后会返回到原始的父shell。Shell程序中的说明:介绍在shell程序中供给说明语句来注明程序的内容。说明由一个不会去履行任安在#以后的语句。#能够出此刻命令行的任何地点。

#符号开始,

Shell注意:你不可以够给shell程序取名为test因为test是一个内部的shell命令。1.3传达数据给shell程序$color=lavender$catcolor1echoyouarenowrunningprogram:color1echothevalueofthevariablecoloris:$color$chmod+xcolor1$color1youarnowrunningprogram:color1thevalueofthevariablecoloris:$exportcolor$color1youarenowrunningprogram:color1thevalueofthevariablecoloris:lavender传达数据给shell脚本的一种方法就是经过环境。在上例中,当地变量color被赋值为lavender,而后创立了shell程序color1;而后改正为可履行权限;而后这个shell程序被履行,color1脚本的企图是显示color变量的值,可是因为color是一个当地变量,属于父shell私有的,运转color1产生的子shell不可以辨别这个变量,所以不能打印出它的值,而当color被输出到环境中就能够被子shell读取。相同,因为shell进度不可以够改正父进度的环境,对一个子进度中的环境变量从头赋值不会影响到父进度环境中的值。如以下的shell脚本中的color2。echoTheoriginalvalueofthevariablecoloris$colorech0Thisprogramwillsetthevalueofcolortoambercolor=amberechoThevalueofcolorisnow$colorechoWhenyourprogramconcludes,displaythevalueofthecolorvariable察看在你设置了color的值后有什么变化。输出这个变量,而后履行color2:$exportcolor=lavender$echo$colorlanvender$color2TheoriginalvalueofthevariablecolorislavenderTheprogramwillsetthevalueofcolortoamberThevalueofvolorisnowamberWhenyourprogamconcludes,displaythevalueofthecolorvariable,$echo$colorlanvender1.4shell程序的参数命令行:例子:$catcolor3echoyouarenowrunningprogram:$0echoThevalueofcommandlineargument\#1is:$1echoThevalueofcommandlineargument\#2is:$2$chmod+xcolor3$color3redgreenYouarenowrunningprogram:color3Thevalueofcommandlineargument#1is:redThevalueofcommandlineargument#2is:green大部分的UNIX系统命令能够接收命令行参数,这些参数往常告诉命令它将要操作的文件或目录(cpf1f2),此外指定的参数扩展命令的能力(ls–l),或许供给文本字符串(bannerhithere)。命令行参数对shell程序相同有效,使用这类方式传递信息给你的程序十分方便。通过开发一个接收命令行参数的程序,你能够传达文件或许目录命令名给你的程序处理,就像你运转UNIX系统命令相同,你也能够定义命令行选项来让命令履行用shell程序额外的功能。在shell程序中的命令行参数与参数在命令行的地点有关,这样的参数被称为地点参数,因为对每一个特别变量的赋值依赖一这些参数在命令行中的地点,变量的变量名对应变量在命令行中的地点,所以这些特别的变量名为数字0,1,2等,向来到最后的参数被传达,变量名的存取也经过相同的方法,在名字前面加上$符号,所以,为了存取你的shell程序中的命令行参数,你能够应用$0,$1,$2等等。在$9此后,必须使用括号:$(10),$(11),不然,shell会将$10当作是$1后边跟一个0。而$0会向来保留程序或命令的名字1.4shell程序的参数(持续)以下的shell程序会安装一个程序,这个程序作为一个命令行参数被安装到你的bin目录:第一创立程序my_install,注意目录$HOME/bin应当早先存在。$cat>my_installecho$0willinstall$1toyourbindirectorychmod+x$1mv$1$HOME/binechoInstallationof$1iscompletectrl+d$chmod+xmy_intalll$my_installcolor3my_installwillinstallcolor3toyourbindirectoryInstallationofcolor3iscomplete$这个例子中,程序指明第一个命令行参数为一个文件名,而后加上履行权限,而后挪动到你目前目录下的bin目录下。记着UNIX系统的老例是存贮程序在bin的目录下。你或许想要在你的HOME目录下创立一个bin目录,在这个目录下你能够储存你的程序言件,记着要将你的bin目录放在PATH环境变量中,这样shell才会找到你的程序。1.5一些特别shell变量-#和*#*例子:$catcolor4echoThereare$comandlineargumentechoTheyare$*ehcoThefirstcommandlineargumentis$1$chmod+xcolor4$color4redgreenyellowblueTheyare4commandlineargumentsTheyareredgreenyellowblueThefirstcommandlineargumentisred$shell程序都不是很灵巧,如color3需要输入两个正确的参数而到现在为止我们看到的my_install只需要一个。往常在创立一个接收命令行参数的shell程序的时候,你想要用户输入一个参数的变量号码。你同时要程序履行成功,不论用户键入1个参数或是20个参数。当办理变量参数列表的时候,特别shell变量会供给你很多的灵巧性。经过$#你能够知道有多少参数已经被输入,经过$*能够存取所有的参数列表,而不论参数的数目。请注意参数($0)不在$*这个参数列表里。每一个命令行参数都是相互独立的,你能够经过$*集中检索这些参数,也能够经过$1,$2,$3等等来独立的检索这些参数。1.5一些特别的shell变量-#和*(持续)一个能够接收多个命令行参数的安装程序的例子:$cat>my_install2echo$0willinstall$#filestoyourbindirectoryechoThefilestobeinstalledare:$*chmod+x$*mv$*$HOME/binechoInstallatoniscompletectril+d$chmod+xmy_install2$my_install2color1color2my_intall2willinstall2filestoyourbindirectoryThefilestobeinstalledare:color1,color2Intallaitoniscomplete这个安装程序更为灵巧,假如你有多个文件要安装,你仅需要履行这个程序一次,只需一次输入多个名字即可。特别重要的是:假如你计划传达整个参数的字符串给一个命令,这个命令一定能够接收多个参数。在以下的脚本中,用户供给一个目录名作为一个命令行参数。程序会改正到指定的目录,显示目前的地点,而且列出内容。$catlist_dircd$*echoYouareinthe$(pwd)directoryechoThecontentsofthedirectoryare:ls–F$list_dirdir1dir2dir3sh:cd:badargumentcount因为cd命令不可以同时进入到多个目录中,这个程序履行会犯错。1.6shift命令向左挪动所有的在*中的字符串#的数目减少n个(n的默认值是

n个地点1)语法:例子:

shift[n]$catcolor5orig_args=$*echoThereare$#commandlineargumentsechoTheyare$*echoShiftingtwoargumentsshift2echoThereare$#comandlineargumentsechoTheyare$*echoShiftingtwoargumentsshift2;final_args=$*echoOriginalargumentsare:$orig_argsechoFinalargumentsare:$final_argsshift命令会从头分派命令行参数对应地点参数,在shiftn此后,所有的*中的参数会向左挪动n个地点。同时$#会减n。默认的n为1。Shift命令不会影响到参数0的位置。一旦你达成一次挪动,被移出命令行的参数会丢掉。假如你想在你的程序中引用这个参数,你需要在履行shift以前存贮这个参数到一个变量中。Shift命令能够用于:存取一组参数的地点,比如一系列的x,y的坐标从命令行删除命令选项,假设选项在参数以前。例子:$color5redgreenyelloworangeblackThereare6commandlineargumentsTheyareredgreenyellowblueorangeblackShiftingtwoargumentsThereare4commandlineargumentsTheyareyellowblueorangeblackShiftgingtwoargumentsOriginalargumentsare:redgreenyellowblueorangeblackFinalargumentare:orangeblack$1.7read命令语法:readvariable[variable......]例子:$catcolor6echoThisprogrampromptsforuserinputecho“pleaseenteryourfavoritetwocolorsc”readcolor_acolor_bechoThecolorsyouenteredare:$color_b$color_a$chmod+xcolor6$color6ThisprogrampromptsforuserinputPleaseenteryourfavoritetwocolors->redblueThecolorsyouenteredare:bluered$color6ThisprogrampromptsforuserinputPleaseenteryoufavoritetwocolors->redbluetanThecoloryouenterdare:bluetanred假如使用命令行参数传达信息进度序,在命令履行以前用户一定知道正确的语法。有一种状况,你想要在用户履行程序的时候提示他输入这些参数。read命令就是用来在程序履行的时候采集终端键入的信息。往常会使用echo命令来给用户一个提示,让他知道程序正在等候一些输入,同时通知用户应当输入的种类。所以,每一个read命令应当在echo命令后边。read命令会给出一个变量名的列表,用户在提示符下输入会给这些变量赋值(变量之间以空格分开)。假如read命令定义的变量比输入的词要多,多出的变量会被赋空值。假如用户输入的词要比变量多,节余的数据会赋给列表中的最后一个变量。一旦被赋值,你就能够象其余的shell变量相同存取这些变量。注意:不要混杂地点参数和变量read。地点参数在命令被激活时直接在命令行中使用,而read命令给变量赋值是在程序履行之中,用户响应输入的提示而给变量赋值。1.7read命令(持续)以下例子提示用户输入要被安装的文件名:$cat>my_install3echo$0willinstallfilesintoyourbindirectoryecho“Enterc”readfilenamesmv$filenames$HOME/binechoInstllationiscompletectrl+d$chmod+xmy_install13$my_install13my_install13willinstallfilesintoyourbindirectoryEnterthenamesofthefiles->f1f2Installatoniscomplete这个安装

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论