1、ppt课件.1第第5章章Linux的的shell编程编程 ppt课件.25.1什么是什么是shell 当一个用户登录当一个用户登录LinuxLinux系统之后,系统初始化系统之后,系统初始化程序程序initinit就为每一个用户运行一个称为就为每一个用户运行一个称为shell(shell(外壳外壳) )的程序。的程序。shellshell就是一个命令行解释器。就是一个命令行解释器。一般的一般的LinuxLinux系统都将系统都将bashbash作为默认的作为默认的shellshell。 ppt课件.35.2几种流行的几种流行的shell目前流行的shell有ash、bash、ksh、csh、z
2、sh等, bash是Linux系统默认使用的shell。可以用下面的命令来查看shell的类型:#echo $SHELL SHELL是一个环境变量,它记录用户所使用的shell类型。ppt课件.4几种流行的几种流行的shell(续)续)可以用命令: #shell-name 来转换到别的shell$exit 退出子shell。ppt课件.55.3 shell程序设计程序设计 使用shell编程类似于DOS中的批处理文件,称为shell script,又叫shell程序或shell命令文件或者shell脚本。Shell脚本程序是按行来解释的,脚本程序总是以 #!/bin/sh 开始的,符号#!用来
3、告诉系统它后面的参数是用来执行该文件的程序。ppt课件.6如果要执行该脚本,还必须使其可执行。 chmod +x filename 然后,您可以通过输入: ./filename 来执行您的脚本。ppt课件.7$ 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.shppt课件.8执行结果: Yo
4、u are welcome to use base.Current work directory is /rootYou are root. ppt课件.95.4 shell基础编程基础编程shell只有字符型变量。shell变量无需初始化,一个没有初始化的shell变量自动被初始化为一个空串。shell变量名大小写敏感。5.4.1 shell变量变量ppt课件.10shell变量变量(续续)Bourne Shell有如下四种变量: 本地变量(用户自定义变量 ) 位置变量即 shell script之参数 预定义变量(特殊变量) 环境变量(参考shell定制部分)ppt课件.115.4.1.1
5、本地变量本地变量(用户自定义变量用户自定义变量) 本地变量在用户现在的shell生命期的脚本中使用。 要设置一本地变量,格式为: $ variable-name=value 或 $ variable-name=value 因为大部分LINUX命令使用小写字符,因此在shell编程中变量通常全部大写。 变量的引用:在变量前加$ 。ppt课件.12(1)显示变量 使用echo命令输出单个变量的值,此时要在变量名前加$ $ WEEK=Satur $ echo Today is $WEEKday输出:Today is 使用花括号来告诉shell我们要显示的变量:$ echo Today is $WEE
6、Kday输出:Today is Saturdayppt课件.13(2)清除变量:使用unset命令删除变量的赋值 $ Z=hello $ echo $Z hello $ unset Z $ echo $Z $ ppt课件.14(3)显示所有本地shell变量: 使用set命令显示所有本地定义的shell变量ppt课件.15(4)结合变量值 Echo $variable-name1$variable-name2$A=Hello,$B=World$echo $A$BHello,Worldppt课件.16(5)设置变量的默认值 Bourne Shell允许对变量设置默认值,其格式如下: $varia
7、ble:-defaultvalue $color=blue $echo The sky is $color:-grey today输出结果:The sky is blue today ppt课件.17$color=blue$unset color$echo The sky is $color:-grey todayThe sky is grey today$echo $color$ppt课件.18改变变量的值,格式如下:$variable:=value$color=blue$unset color$echo The sky is $color:=grey todayThe sky is gre
8、y today$echo $color$ greyppt课件.19(6)使用变量来保存系统命令参数使用变量来保存系统命令参数 可以用变量保存系统命令参数的替换信息。$ source= /etc/passwd$ cd $source ppt课件.20(7)设置只读变量设置只读变量 格式:variable-name=valuereadonly variable-name 查看所有只读变量,使用命令readonlyppt课件.215.4.1.2 环境变量 环境变量用于所有用户进程(经常称为子进程)。登录进程称为父进程。s h e l l中执行的用户进程均称为子进程。环境变量应用于用户进程前,必须用e
9、xport命令导出。ppt课件.22(1) 设置环境变量设置环境变量 VARIABLE-NAME=value;export VARIABLE-NAME也可:VARIABLE-NAME=valueexport VARIABLE-NAMEppt课件.23环境变量环境变量(续续)(2)显示环境变量显示环境变量显示环境变量与显示本地变量一样。使用env命令可以查看所有的环境变量。(3) 清除环境变量清除环境变量使用unset命令清除环境变量ppt课件.24(4)set命令命令 不带参数的set命令输出目前所有的shell变量(含用户自定义的变量)和它们的当前值。ppt课件.25(5) 将变量导出到子进
10、程将变量导出到子进程 $cat father#!/bin/sh#father scriptecho this is the fatherFILM=A Few Good Menecho I like the film :$FILM./child #call the child scriptecho back to fatherecho and the film is :$FILM ppt课件.26将变量导出到子进程将变量导出到子进程(续续)$cat child#!/bin/sh#child scriptecho called from father.i am the childecho film
11、 is :$FILMFILM=Die Hardecho changing film to :$FILM ppt课件.27显示结果this is the fatherI like the film :A Few Good Mencalled from father.i am the childfilm is :changing film to :Die Hardback to fatherand the film is :A Few Good Men ppt课件.28$cat father2#!/bin/sh#father2 scriptecho this is the fatherFILM=A
12、 Few Good Menecho I like the film :$FILM#call the child script#but export varible firstexport FILM #在调用脚本前导出变量./childecho back to fatherecho and the film is :$FILM ppt课件.29输出结果$ ./father2this is the fatherI like the film :A Few Good Mencalled from father.i am the childfilm is :A Few Good Menchanging
13、 film to :Die Hardback to fatherand the film is :A Few Good Men ppt课件.305.4.1.3 位置变量参数位置变量参数 如果要向一个shell脚本传递信息,可以使用位置参数完成此功能。参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制。参数从第1个开始,在第9个结束;每个访问参数前要加$符号。第一个参数为0,表示预留保存实际脚本名字。ppt课件.31位置变量参数(续)位置变量参数(续)如向脚本传送Did You See The Full Moon信息:$0 $1 $2 $3 $4
14、$5 $6 脚本名字 Did You See The Full Moon $7 $8 $9ppt课件.32(1) 在脚本中使用位置参数在脚本中使用位置参数 $cat param#!/bin/sh#paramecho This is the script name : $0echo This is the first parameter: $1echo This is the 2nd parameter : $2echo This is the third parameter: $3 echo This is the 6th parameter : $6echo This is the 7th
15、parameter : $7 ppt课件.33输出结果执行:$ ./param Did You See The Full Moon This is the script name : ./paramThis is the first parameter: DidThis is the 2nd parameter : YouThis is the third parameter: SeeThis is the 6th parameter : MoonThis is the 7th parameter : ppt课件.34(2) 向系统命令传递参数向系统命令传递参数 $cat findfile#!
16、/bin/sh#findfilefind / -name $1 print ppt课件.355.4.1.4 预定义变量预定义变量 预定义变量是在shell一开始时就定义了的变量,用户不能重定义它。所有预定义变量都是由$符和另一个符号组成的。常用的预定义变量:$# 传递到脚本的参数个数$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个$ 脚本运行的当前进程ID号 ppt课件.36预定义变量(续)预定义变量(续)$! 后台运行的最后一个进程的进程ID号$ 与$ #相同,但是使用时加引号,并在引号中返回每个参数$- 显示shell使用的当前选项,与set命令功能相同$
17、? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。ppt课件.37(1) 最后的退出状态最后的退出状态 $ cp ok.txt /tmp$ echo $?0$ cp ok.txt /usr/bin/aaa/bbbcp: cannot create regular file /usr/bin/aaa/bbb: No such file or directory$ echo $?1ppt课件.385.4.2条件测试条件测试 (1) 测试文件状态t e s t一般有两种格式,即:test condition或 condition 使用方括号时,要注意在条件两边加上空格。 ppt课件.
18、39测试文件状态 (续)-r文件名:如果文件存在且可读则为真-w文件名:如果文件存在且可写则为真-x文件名:如果文件存在且可执行则为真-s文件名:如果文件存在且至少有一个字符则为真-d文件名:如果文件存在且为目录则为真-f文件名:如果文件存在且为普通文件则为真-e文件名:如果文件存在则为真-c文件名:如果文件存在且为字符型特殊文件则为真-b文件名:如果文件存在且为块特殊文件则为真ppt课件.40测试文件scores.txt 是否可写 $ls l scores.txt-rw-rr- 1 daveadmin 0 May 15 11:29 scores.txt$ -w scores.txt $ech
19、o $?0$test w scores.txt$echo $?0ppt课件.41简单的算术运算 格式:$expression例如:var1=2var2=$var1*10+1则:var2的值为21。 ppt课件.42数值数据处理Bash提供了3种方法对数值型数据进行算术运算:(1)使用let命令(2)使用shell扩展$(expression)(3)使用expr命令ppt课件.43(1)let命令语法:let express-list功能:求出算术表达式的值如果最后的表达式取值为0,则let命令返回1;否则返回0。$let “a=8” “b=13” #命令中的表达式含空格,需加双引号$let c
20、=a+bppt课件.44$echo “The value of c is $c.”The value of c is 21.$let “a *= b”$echo “The new value of a is $a; the product of a and b.”The new value of a is 104; the product of a and b.ppt课件.45Bash扩展语法:$(expression)功能:计算expression并返回它的值$a=8 b=13$echo “The new value of c is $(a+b) .”The new value of c i
21、s 21.ppt课件.46expr命令语法:expr args功能:计算args的值,并返回它的值到标准输出 $var1=10 $var1=expr $var1 + 1 $echo $var111ppt课件.47(2)测试时使用逻辑操作符号测试时使用逻辑操作符号 Shell提供了三种逻辑操作完成两个文件状态比较的功能-a 逻辑与-o 逻辑或 ! 逻辑否测试两个文件是否均可写$ -w scores.txt a w results.txt $echo $?0ppt课件.48(3)字符串测试字符串测试 字符串测试共包含五种格式:test “string”test string_operator “s
22、tring” test “string” string_operator “string” string_operator string string string_operator string ppt课件.49String_operator 可以为:=:两个字符串相等!=:两个字符串不等-z:空串-n:非空串 ppt课件.50比较两个字符串是否相等 $TAPE1=”/dev/rmt0” $TAPE2=”dev/rmt1”$ “$TAPE1” = “$TAPE2”$echo $?1 ppt课件.51(4)数值测试数值测试 格式:“number” numeric_operator “numbe
23、r” 或 “number” numeric_operator “number” ppt课件.52numeric_operator一般为:-eq:数值相等-ne:数值不相等-gt:大于-lt:小于-le:小于等于-ge:大于等于 ppt课件.53测试两个数是否相等 $NUMBER=130$ “NUMBER” eq “130” $echo $?0ppt课件.54测试两个表达式 $ “990” le “995” a “123” gt “33”$echo $?0ppt课件.555.4.3 控制流结构控制流结构 (1)if 语句 if expression1 then command-list elif
24、 expression2 then then-command-list else else-command-listfi在这里,一个expression是一系列命令。ppt课件.56也可采用如下格式:if expression1;then command-list elif expression2;then then-command-list else else-command-listfi ppt课件.57三种典型的if结构第一种if语句:if expression then then-commandsfi第二种if语句:if expression then then-commands el
25、se else-commandsfippt课件.58第3种if语句if expression1 then then-commandselif expression2 then elif1-commandselif expression3 then elif2-commands else else-commandsfippt课件.59例如:$cat grade_evaluate.sh#!/bin/sh# Usage: ./grade_evaluate grade# grade should be between 0 and 100, including 0 and 100if $1 lt 0 ;
26、 thenecho Error: invalid gradeelif $1 lt 60 ; thenecho no passppt课件.60elif $1 lt 70 ; thenecho passelif $1 lt 80 ; thenecho goodelif $1 le 100 ; thenecho excellentelseechoError: invalid gradefippt课件.61(2)case 语句 格式: case test-string in模式1) command-list1 ;模式2) command-list2 ;*) command-listN+1;esac p
27、pt课件.62case 语句(续) in 的每一模式必须以右括号)结束,取值可以为变量或常数,匹配发现string1取值符合某一模式后,其间所有命令开始执行直至;.如果模式1、模式2中没有和strings1相符合的,则星号(*)下面的语句被执行。模式匹配符*代表任意字符,?表示任意单个字符,.表示类或范围中任意字符。 ppt课件.63$cat caseexample.sh#!/bin/shecho n Do you want to continue this operation? nread yesnocase $yesno iny | Y | Yes | yes)echo system wi
28、ll continue this operation;ppt课件.64n | N | no | NO)echo system will skip this operation;*)echo Incorrect inputexit 1;esacppt课件.65(3)for语句 有两种使用 for 语句的表达式:第一种形式是:for var in listdocommandsdoneppt课件.66第二种形式是:for vardostatementsDone使用这种形式时,变量var的取值是位置参数。 ppt课件.67$cat simplefor.sh#!/bin/shfor i in 1 3 5
29、 7 9doecho $Idoneppt课件.68(4)while和until循环 while循环的一般格式为:while expressiondostatementsdoneppt课件.69$cat whileexample.sh#!/bin/shwhile read stringdoecho ”your string is $string”doneecho Thank you, Bye! ppt课件.70#! /bin/bash#program test_while#count=1while -n $*doecho This is parameter number $count $1shi
30、ftlet count=count+1done ppt课件.71until语句的格式为:until expressiondocommandsdoneppt课件.72#! /bin/bash#program test_until#count=1until -z $*doecho This is parameter number $count $1shiftlet count=count+1done ppt课件.73$cat untilexample.sh#!/bin/shuntil read stringdoecho ”your string is $string”doneecho Thank
31、you, Bye! ppt课件.74输出结果$your string is(程序继续)$abcThank you, Bye!ppt课件.75Shell还提供了true和false两条命令用于建立无限循环结构的需要,它们的返回状态分别是总为0或总为非0 ppt课件.76(5) break and continue break 退出循环$cat breakexample.sh#!/bin/shwhile :doread stringif $? != 0 ;thenbreakfidoneppt课件.77$cat continueexample.sh#!/bin/shfor (i=0 ;i / p a
32、 t h / W R I T E _ F I L E . T X T #WRITE_FILE.TXT是写入数据的文件名done /path/WRITE_FILE.TXT #WRITE_FILE.TXT是写入数据的文件名doneppt课件.112(4)cat 命令 cat 命令可以用来显示文件内容,创建文件,还可以用来显示控制符号(用-v选项)。 cat命令一下子显示整个完整的文件。如果希望每次显示一页,可以使用more命令$ cat filename$more filename ppt课件.113连接文件$cat filename1 filename2 filename3 #该命令把两个文件连
33、成一个文件filename3ppt课件.114输入文件$ cat a.txtabcefgppt课件.115(5)tee 功能:tee命令从标准输入设备读取数据,将其内容输出到标准输出设备,同时将输出的一个副本保存成文件。语 法:tee -a-i-help-version文件 参 数:-a 附加到文件的后面,而非覆盖它。如果tee指令的文件已经存在,没有-a则会覆盖该文件的内容。有-a,数据会新增在该文件内容的最后面,而不会删除原先之内容。 -i 忽略中断信号 -help 在线帮助 -version 显示版本信息 ppt课件.116(6)文件重定向 在Linux中,每一个进程都有三个特殊的文件描
34、述指针:标准输入(standard input,文件描述符为0)、标准输出(standard output,文件描述符为1)、标准错误输出(standard error,文件描述符为2)。在Linux中,可以通过文件重定向指定命令的标准输入、标准输出和标准错误输出。在shell中,使用者可以利用“”和“filename:将标准输出重定向到文件filename。command 1filename:将标准输出重定向到文件filename。commandfilename:将标准输出重定向到文件filename(追加)。commandfilename 2&1将标准输出和标准错误输出一起重定向到文件fi
35、lename。command 2filename:将标准错误输出重定向到文件filename。command 2filename:将标准错误输出重定向到文件filename(追加)。 ppt课件.118文件重定向(续)commandfilename 2&1将标准输出和标准错误输出一起重定向到文件filename中(追加)。commandfilename2:让command命令以文件filename为标准输入,以文件filename2为标准输出。commandfilename:让command命令以文件filename为标准输入。commanddelimiter:让command命令以标准输入作
36、为输入,直到遇到delimiter分界符。 ppt课件.119文件重定向(续)command&m:把标准输出重定向到文件描述符m中。command&-:关闭标准输入。 ppt课件.1205.5 shell高级编程5.5.1命令排列、调度与替换 (1)命令排列shell 允许用户在不同的命令之间,放上特殊的排列字符。用户如果需要在一行中给出多个命令需使用分号“;”。command1 ; command2 ppt课件.121(1)命令排列(续)command1 & command2上面的命令表示只有当 command1 正确运行完毕后,才执行 command2 。 ppt课件.122command
37、1 | command2 上面的命令表示只有当 command1 运行失败才会执行 command2 。 ppt课件.123(2)命令的任务调度 在shell下面,一个新产生的进程可以通过用命令后面的符号“;”和“&”来分别以前台和后台的方式来执行,语法如下: command;产生一个前台的进程,下一个命令须等该命令运行结束后才能输入。command &产生一个后台的进程,此进程在后台运行的同时,可以输入其他的命令。 ppt课件.124(3)命令的替换 command1 $(command2)除了$( ),还可以用后引号(backquote):command1 command2 ppt课件.1
38、255.5.2引用 (1)双引号 使用双引号可引用除字符$(美元符号)、(反引号)、(反斜线)外的任意字符或字符串。 (2)单引号如果用单引号把字符串括起来,则单引号内字符串中的任何特殊字符的特殊含义均被屏蔽。 ppt课件.126引用(续)(3)反引号shell将反引号中的内容作为一个系统命令,并执行其内容。使用这种方法可以替换输出为一个变量。$TIME=date$echo $TIMEppt课件.127(4)反斜线 如果一个字符有特殊含义,可以使用反斜线防止shell误解其含义,即屏蔽其特殊含义。下述字符包含有特殊意义: & * + $ | ? ppt课件.1285.5.3命令分组 在shel
39、l中有两种命令分组的方法:“()”和“”,当用户在执行某个命令时不想让命令运行时对状态集合(如位置参数、环境变量、当前工作目录等)的改变影响到下面语句的执行时,就应该把这些命令放在圆括弧中用于将顺序执行的命令的输出结果用于另一个命令的输入(管道方式)。ppt课件.1295.5.4运行shell程序的方法 执行shell程序,有三种方法:(1)将shell程序作为sh命令的输入,具体如下: # sh first.sh ppt课件.130运行shell程序的方法(续)(2)利用输入重定向# bashfirst.sh (3)使用chmod命令使first.sh成为可执行的,然后直接执行。 # chm
40、od a+x first.sh# first.sh ppt课件.1315.5.5 bash程序的调试 shell程序的调试主要是利用bash命令解释程序的选择项。调用bash的形式是:bash -选择项 shell程序文件名ppt课件.132几个常用的选择项-e:如果一个命令失败就立即退出-n:读入命令但是不执行它们-u:置换时把未设置的变量看作出错-v:当读入shell输入行时把它们显示出来-x:执行命令时把命令和它们的参数显示出来 ppt课件.133(1)未置变量退出和立即退出 未置变量退出:如果引用了一个未赋值的变量就终止shell程序的执行。未置变量退出选择项为“-u”。要想在错误发生时使shell程序立即结束,可以使用“-e”选项。 ppt课件.134(2)shell程序的跟踪 调试shell程序的主要方法是利用shell命令解释程序的“-v”或“-x”选项来跟踪程序的执行。“-v”选择项使shell在执行程序的过程中,把它读入的每一个命令行都显示出来,而“-x”选择项使shell在执行程序的过程中把它执行的每一个命令在行首用一个“+”加上命令名显示出来。并把每一个变量和该变量所取的值也显示出来。 此课件下载可自行编辑修改,供参考!感谢您的支持,我们努力做得更好!