Linux的shell编程

上传人:夏** 文档编号:569532978 上传时间:2024-07-30 格式:PPT 页数:135 大小:273.50KB
返回 下载 相关 举报
Linux的shell编程_第1页
第1页 / 共135页
Linux的shell编程_第2页
第2页 / 共135页
Linux的shell编程_第3页
第3页 / 共135页
Linux的shell编程_第4页
第4页 / 共135页
Linux的shell编程_第5页
第5页 / 共135页
点击查看更多>>
资源描述

《Linux的shell编程》由会员分享,可在线阅读,更多相关《Linux的shell编程(135页珍藏版)》请在金锄头文库上搜索。

1、LinuxLinux的的shellshell编程编程5.1什么是什么是shell当一个用户登录当一个用户登录LinuxLinux系统之后,系统初始化系统之后,系统初始化程序程序initinit就为每一个用户运行一个称为就为每一个用户运行一个称为shell(shell(外壳外壳) )的程序。的程序。shellshell就是一个命令行解释器。就是一个命令行解释器。一般的一般的LinuxLinux系统都将系统都将bashbash作为默认的作为默认的shellshell。 5.2几种流行的几种流行的shell目前流行的shell有ash、bash、ksh、csh、zsh等,bash是Linux系统默认

2、使用的shell。可以用下面的命令来查看shell的类型:#echo $SHELL SHELL是一个环境变量,它记录用户所使用的shell类型。几种流行的几种流行的shell(续)续)可以用命令: #shell-name 来转换到别的shell$exit退出子shell。5.3shell程序设计程序设计使用shell编程类似于DOS中的批处理文件,称为shell script,又叫shell程序或shell命令文件或者shell脚本。Shell脚本程序是按行来解释的,脚本程序总是以 #!/bin/sh开始的,符号#!用来告诉系统它后面的参数是用来执行该文件的程序。如果要执行该脚本,还必须使其可

3、执行。 chmod +x filename 然后,您可以通过输入: ./filename 来执行您的脚本。$ cat firstscript.sh#!/bin/shecho “You are welcome to use base.” echo “Current work directory is $PWD.”echo “You are $LOGNAME.”增加执行权限$chmod +x firstscript.sh开始运行程序:$./firstscript.sh执行结果:You are welcome to use base.Current work directory is /rootYo

4、uareroot.shell只有字符型变量。shell变量无需初始化,一个没有初始化的shell变量自动被初始化为一个空串。shell变量名大小写敏感。5.4shell基础编程基础编程5.4.1shell变量变量Bourne Shell有如下四种变量: 本地变量(用户自定义变量 )位置变量即 shell script之参数 预定义变量(特殊变量)环境变量(参考shell定制部分)shell变量变量(续续)5.4.1.1本地变量本地变量(用户自定义变量用户自定义变量)本地变量在用户现在的shell生命期的脚本中使用。要设置一本地变量,格式为:$variable-name=value或$varia

5、ble-name=value因为大部分LINUX命令使用小写字符,因此在shell编程中变量通常全部大写。变量的引用:在变量前加$。(1)显示变量使用echo命令输出单个变量的值,此时要在变量名前加$ WEEK=Satur $ echo Today is $WEEKday输出:Todayis使用花括号来告诉shell我们要显示的变量:$ echo Today is $WEEKday输出:Today is Saturday(2)清除变量:使用unset命令删除变量的赋值$ Z=hello $ echo $Z hello $ unset Z $ echo $Z $ (3)显示所有本地shell变量

6、:使用set命令显示所有本地定义的shell变量(4)结合变量值Echo $variable-name1$variable-name2$A=Hello,$B=World$echo $A$BHello,World(5)设置变量的默认值Bourne Shell允许对变量设置默认值,其格式如下: $variable:-defaultvalue $color=blue $echo The sky is $color:-grey today输出结果:Theskyisbluetoday$color=blue$unset color$echo The sky is $color:-grey todayThe

7、 sky is grey today$echo $color$改变变量的值,格式如下:$variable:=value$color=blue$unset color$echo The sky is $color:=grey todayThe sky is grey today$echo $color$ grey(6)使用变量来保存系统命令参数使用变量来保存系统命令参数可以用变量保存系统命令参数的替换信息。$ source= /etc/passwd$cd$source(7)设置只读变量设置只读变量格式:variable-name=valuereadonlyvariable-name查看所有只读变

8、量,使用命令readonly5.4.1.2环境变量环境变量用于所有用户进程(经常称为子进程)。登录进程称为父进程。shell中执行的用户进程均称为子进程。环境变量应用于用户进程前,必须用export命令导出。(1)设置环境变量设置环境变量VARIABLE-NAME=value;export VARIABLE-NAME也可:VARIABLE-NAME=valueexport VARIABLE-NAME环境变量环境变量(续续)(2)显示环境变量显示环境变量显示环境变量与显示本地变量一样。使用env命令可以查看所有的环境变量。(3)清除环境变量清除环境变量使用unset命令清除环境变量(4)set命

9、令命令不带参数的set命令输出目前所有的shell变量(含用户自定义的变量)和它们的当前值。(5)将变量导出到子进程将变量导出到子进程$catfather#!/bin/sh#fatherscriptechothisisthefatherFILM=AFewGoodMenechoIlikethefilm:$FILM./child#callthechildscriptechobacktofatherechoandthefilmis:$FILM将变量导出到子进程将变量导出到子进程(续续)$catchild#!/bin/sh#childscriptechocalledfromfather.iamthec

10、hildechofilmis:$FILMFILM=DieHardechochangingfilmto:$FILM显示结果thisisthefatherIlikethefilm:AFewGoodMencalledfromfather.iamthechildfilmis:changingfilmto:DieHardbacktofatherandthefilmis:AFewGoodMen$catfather2#!/bin/sh#father2scriptechothisisthefatherFILM=AFewGoodMenechoIlikethefilm:$FILM#callthechildscri

11、pt#butexportvariblefirstexportFILM#在调用脚本前导出变量./childechobacktofatherechoandthefilmis:$FILM输出结果$./father2thisisthefatherIlikethefilm:AFewGoodMencalledfromfather.iamthechildfilmis:AFewGoodMenchangingfilmto:DieHardbacktofatherandthefilmis:AFewGoodMen5.4.1.3位置变量参数位置变量参数如果要向一个shell脚本传递信息,可以使用位置参数完成此功能。参数

12、相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制。参数从第1个开始,在第9个结束;每个访问参数前要加$符号。第一个参数为0,表示预留保存实际脚本名字。位置变量参数(续)位置变量参数(续)如向脚本传送DidYouSeeTheFullMoon信息:$0$1$2$3$4$5$6脚本名字DidYouSeeTheFullMoon$7$8$9(1)在脚本中使用位置参数在脚本中使用位置参数$catparam#!/bin/sh#paramechoThisisthescriptname:$0echoThisisthefirstparameter:$1echoThis

13、isthe2ndparameter:$2echoThisisthethirdparameter:$3echoThisisthe6thparameter:$6echoThisisthe7thparameter:$7输出结果执行:$./paramDidYouSeeTheFullMoonThisisthescriptname:./paramThisisthefirstparameter:DidThisisthe2ndparameter:YouThisisthethirdparameter:SeeThisisthe6thparameter:MoonThisisthe7thparameter:(2)向系

14、统命令传递参数向系统命令传递参数$catfindfile#!/bin/sh#findfilefind/-name$1print5.4.1.4预定义变量预定义变量预定义变量是在shell一开始时就定义了的变量,用户不能重定义它。所有预定义变量都是由$符和另一个符号组成的。常用的预定义变量:$#传递到脚本的参数个数$*以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个$脚本运行的当前进程ID号预定义变量(续)预定义变量(续)$!后台运行的最后一个进程的进程ID号$与$#相同,但是使用时加引号,并在引号中返回每个参数$-显示shell使用的当前选项,与set命令功能相同$?

15、显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。(1)最后的退出状态最后的退出状态$cpok.txt/tmp$echo$?0$cpok.txt/usr/bin/aaa/bbbcp:cannotcreateregularfile/usr/bin/aaa/bbb:Nosuchfileordirectory$echo$?15.4.2条件测试条件测试(1)测试文件状态test一般有两种格式,即:testcondition或condition使用方括号时,要注意在条件两边加上空格。测试文件状态(续)-r文件名:如果文件存在且可读则为真-w文件名:如果文件存在且可写则为真-x文件名:如果文件

16、存在且可执行则为真-s文件名:如果文件存在且至少有一个字符则为真-d文件名:如果文件存在且为目录则为真-f文件名:如果文件存在且为普通文件则为真-e文件名:如果文件存在则为真-c文件名:如果文件存在且为字符型特殊文件则为真-b文件名:如果文件存在且为块特殊文件则为真测试文件scores.txt是否可写$lslscores.txt-rw-rr-1dave admin0May1511:29scores.txt$-wscores.txt$echo$?0$testwscores.txt$echo$?0简单的算术运算格式:$expression例如:var1=2var2=$var1*10+1则:var2

17、的值为21。数值数据处理Bash提供了3种方法对数值型数据进行算术运算:(1)使用let命令(2)使用shell扩展$(expression)(3)使用expr命令(1)let命令语法:letexpress-list功能:求出算术表达式的值如果最后的表达式取值为0,则let命令返回1;否则返回0。$let“a=8”“b=13”#命令中的表达式含空格,需加双引号$letc=a+b$echo“Thevalueofcis$c.”Thevalueofcis21.$let“a*=b”$echo“Thenewvalueofais$a;theproductofaandb.”Thenewvalueofais1

18、04;theproductofaandb.Bash扩展语法:$(expression)功能:计算expression并返回它的值$a=8b=13$echo“Thenewvalueofcis$(a+b).”Thenewvalueofcis21.expr命令语法:exprargs功能:计算args的值,并返回它的值到标准输出$var1=10$var1=expr$var1+1$echo$var111(2)测试时使用逻辑操作符号测试时使用逻辑操作符号Shell提供了三种逻辑操作完成两个文件状态比较的功能-a逻辑与-o逻辑或!逻辑否测试两个文件是否均可写$-wscores.txtawresults.tx

19、t$echo$?0(3)字符串测试字符串测试字符串测试共包含五种格式:test“string”teststring_operator“string”test“string”string_operator“string”string_operatorstringstringstring_operatorstringString_operator可以为:=:两个字符串相等!=:两个字符串不等-z:空串-n:非空串比较两个字符串是否相等$TAPE1=”/dev/rmt0”$TAPE2=”dev/rmt1”$“$TAPE1”=“$TAPE2”$echo$?1(4)数值测试数值测试格式:“number”

20、numeric_operator“number”或“number”numeric_operator“number”numeric_operator一般为:-eq:数值相等-ne:数值不相等-gt:大于-lt:小于-le:小于等于-ge:大于等于测试两个数是否相等$NUMBER=130$“NUMBER”eq“130”$echo$?0测试两个表达式$“990”le“995”a“123”gt“33”$echo$?05.4.3控制流结构控制流结构(1)if语句ifexpression1thencommand-listelifexpression2thenthen-command-listelseels

21、e-command-listfi在这里,一个expression是一系列命令。也可采用如下格式:ifexpression1;thencommand-listelifexpression2;thenthen-command-listelseelse-command-listfi三种典型的if结构第一种if语句:ifexpressionthenthen-commandsfi第二种if语句:ifexpressionthenthen-commandselseelse-commandsfi第3种if语句ifexpression1thenthen-commandselifexpression2thenel

22、if1-commandselifexpression3thenelif2-commandselseelse-commandsfi例如:$catgrade_evaluate.sh#!/bin/sh#Usage:./grade_evaluategrade#gradeshouldbebetween0and100,including0and100if$1lt0;thenechoError:invalidgradeelif$1lt60;thenechonopasselif$1lt70;thenechopasselif$1lt80;thenechogoodelif$1le100;thenechoexcel

23、lentelseechoError:invalidgradefi(2)case语句格式:casetest-stringin模式1)command-list1;模式2)command-list2;*)command-listN+1;esaccase语句(续)in的每一模式必须以右括号)结束,取值可以为变量或常数,匹配发现string1取值符合某一模式后,其间所有命令开始执行直至;.如果模式1、模式2中没有和strings1相符合的,则星号(*)下面的语句被执行。模式匹配符*代表任意字符,?表示任意单个字符,.表示类或范围中任意字符。$catcaseexample.sh#!/bin/shecho

24、n Do you want to continue thisoperation?nreadyesnocase$yesnoiny|Y|Yes|yes)echosystemwillcontinuethisoperation;n|N|no|NO)echosystemwillskipthisoperation;*)echoIncorrectinputexit1;esac(3)for语句有两种使用for语句的表达式:第一种形式是:forvarinlistdocommandsdone第二种形式是:forvardostatementsDone使用这种形式时,变量var的取值是位置参数。$catsimplef

25、or.sh#!/bin/shforiin13579doecho$Idone(4)while和until循环while循环的一般格式为:whileexpressiondostatementsdone$catwhileexample.sh#!/bin/shwhilereadstringdoecho”yourstringis$string”doneechoThankyou,Bye!#!/bin/bash#programtest_while#count=1while-n$*doechoThisisparameternumber$count$1shiftletcount=count+1doneuntil

26、语句的格式为:untilexpressiondocommandsdone#!/bin/bash#programtest_until#count=1until-z$*doechoThisisparameternumber$count$1shiftletcount=count+1done$catuntilexample.sh#!/bin/shuntilreadstringdoecho”yourstringis$string”doneechoThankyou,Bye!输出结果$yourstringis(程序继续)$abcThankyou,Bye!Shell还提供了true和false两条命令用于建立

27、无限循环结构的需要,它们的返回状态分别是总为0或总为非0(5)breakandcontinuebreak退出循环$catbreakexample.sh#!/bin/shwhile:doreadstringif$?!=0;thenbreakfidone$catcontinueexample.sh#!/bin/shfor(i=0;i/path/WRITE_FILE.TXT#WRITE_FILE.TXT是写入数据的文件名done/path/WRITE_FILE.TXT#WRITE_FILE.TXT是写入数据的文件名done(4)cat命令cat命令可以用来显示文件内容,创建文件,还可以用来显示控制符

28、号(用-v选项)。cat命令一下子显示整个完整的文件。如果希望每次显示一页,可以使用more命令$catfilename$morefilename连接文件$catfilename1filename2filename3#该命令把两个文件连成一个文件filename3输入文件$cata.txtabcefg(5)tee功能:tee命令从标准输入设备读取数据,将其内容输出到标准输出设备,同时将输出的一个副本保存成文件。语法:tee-a-i-help-version文件参数:-a附加到文件的后面,而非覆盖它。如果tee指令的文件已经存在,没有-a则会覆盖该文件的内容。有-a,数据会新增在该文件内容的最后

29、面,而不会删除原先之内容。-i忽略中断信号-help在线帮助-version显示版本信息(6)文件重定向在Linux中,每一个进程都有三个特殊的文件描述指针:标准输入(standardinput,文件描述符为0)、标准输出(standardoutput,文件描述符为1)、标准错误输出(standarderror,文件描述符为2)。在Linux中,可以通过文件重定向指定命令的标准输入、标准输出和标准错误输出。在shell中,使用者可以利用“”和“filename:将标准输出重定向到文件filename。command1filename:将标准输出重定向到文件filename。commandfil

30、ename:将标准输出重定向到文件filename(追加)。commandfilename2&1将标准输出和标准错误输出一起重定向到文件filename。command2filename:将标准错误输出重定向到文件filename。command2filename:将标准错误输出重定向到文件filename(追加)。文件重定向(续)commandfilename2&1将标准输出和标准错误输出一起重定向到文件filename中(追加)。commandfilename2: 让 command命令 以 文 件 filename为 标 准 输 入 , 以 文 件filename2为标准输出。comma

31、ndfilename: 让 command命 令 以 文 件filename为标准输入。commanddelimiter:让command命令以标准输入作为输入,直到遇到delimiter分界符。文件重定向(续)command&m:把标准输出重定向到文件描述符m中。command&-:关闭标准输入。5.5shell高级编程5.5.1命令排列、调度与替换(1)命令排列shell允许用户在不同的命令之间,放上特殊的排列字符。用户如果需要在一行中给出多个命令需使用分号“;”。command1;command2(1)命令排列(续)command1&command2上面的命令表示只有当command1正

32、确运行完毕后,才执行command2。command1|command2上面的命令表示只有当command1运行失败才会执行command2。(2)命令的任务调度在shell下面,一个新产生的进程可以通过用命令后面的符号“;”和“&”来分别以前台和后台的方式来执行,语法如下:command;产生一个前台的进程,下一个命令须等该命令运行结束后才能输入。command&产生一个后台的进程,此进程在后台运行的同时,可以输入其他的命令。(3)命令的替换command1$(command2)除了$(),还可以用后引号(backquote):command1command25.5.2引用(1)双引号使用双

33、引号可引用除字符$(美元符号)、(反引号)、(反斜线)外的任意字符或字符串。(2)单引号如果用单引号把字符串括起来,则单引号内字符串中的任何特殊字符的特殊含义均被屏蔽。引用(续)(3)反引号shell将反引号中的内容作为一个系统命令,并执行其内容。使用这种方法可以替换输出为一个变量。$TIME=date$echo$TIME(4)反斜线如果一个字符有特殊含义,可以使用反斜线防止shell误解其含义,即屏蔽其特殊含义。下述字符包含有特殊意义:&*+$|?5.5.3命令分组在shell中有两种命令分组的方法:“()”和“”,当用户在执行某个命令时不想让命令运行时对状态集合(如位置参数、环境变量、当前

34、工作目录等)的改变影响到下面语句的执行时,就应该把这些命令放在圆括弧中用于将顺序执行的命令的输出结果用于另一个命令的输入(管道方式)。5.5.4运行shell程序的方法执行shell程序,有三种方法:(1)将shell程序作为sh命令的输入,具体如下:#shfirst.sh运行shell程序的方法(续)(2)利用输入重定向#bashfirst.sh(3)使用chmod命令使first.sh成为可执行的,然后直接执行。#chmoda+xfirst.sh#first.sh5.5.5bash程序的调试shell程序的调试主要是利用bash命令解释程序的选择项。调用bash的形式是:bash-选择项s

35、hell程序文件名几个常用的选择项-e:如果一个命令失败就立即退出-n:读入命令但是不执行它们-u:置换时把未设置的变量看作出错-v:当读入shell输入行时把它们显示出来-x:执行命令时把命令和它们的参数显示出来(1)未置变量退出和立即退出未置变量退出:如果引用了一个未赋值的变量就终止shell程序的执行。未置变量退出选择项为“-u”。要想在错误发生时使shell程序立即结束,可以使用“-e”选项。(2)shell程序的跟踪调试shell程序的主要方法是利用shell命令解释程序的“-v”或“-x”选项来跟踪程序的执行。“-v”选择项使shell在执行程序的过程中,把它读入的每一个命令行都显示出来,而“-x”选择项使shell在执行程序的过程中把它执行的每一个命令在行首用一个“+”加上命令名显示出来。并把每一个变量和该变量所取的值也显示出来。结束结束

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号