第3章Shell及其编程

上传人:hs****ma 文档编号:579816136 上传时间:2024-08-27 格式:PPT 页数:119 大小:1,000.02KB
返回 下载 相关 举报
第3章Shell及其编程_第1页
第1页 / 共119页
第3章Shell及其编程_第2页
第2页 / 共119页
第3章Shell及其编程_第3页
第3页 / 共119页
第3章Shell及其编程_第4页
第4页 / 共119页
第3章Shell及其编程_第5页
第5页 / 共119页
点击查看更多>>
资源描述

《第3章Shell及其编程》由会员分享,可在线阅读,更多相关《第3章Shell及其编程(119页珍藏版)》请在金锄头文库上搜索。

1、第第3章章 Shell及其编程及其编程计算机学院计算机学院 潘潘 薇薇本章要点本章要点v3.1 Shell概述概述v3.2 Shell脚本脚本v3.3 Shell脚本变量脚本变量v3.4 Shell控制结构控制结构v3.5 Shell函数函数3.1 Shell概述概述3.1 Shell概述概述vShell是用户和是用户和Linux(或者更准确的说,是用户和(或者更准确的说,是用户和Linux内核)之间的接口程序。你在提示符下输入的每个内核)之间的接口程序。你在提示符下输入的每个命令都由命令都由Shell先解释然后传给先解释然后传给Linux内核。内核。vShell 是一个命令语言解释器,拥有自

2、己内建的是一个命令语言解释器,拥有自己内建的Shell命命令集。此外,令集。此外,Shell也能被系统中其他有效的也能被系统中其他有效的Linux 实用实用程序和应用程序所调用。程序和应用程序所调用。 3.1 Shell概述概述Shell具有的主要功能有:具有的主要功能有:v命令解释功能命令解释功能:将用户可读的命令转换成计算机可理解的:将用户可读的命令转换成计算机可理解的命令,并控制命令执行。命令,并控制命令执行。v输入输入/输出重定向输出重定向:操作系统将键盘作为标准输入、显示器:操作系统将键盘作为标准输入、显示器作为标准输出。当这些定向不能满足用户需求时,用户可作为标准输出。当这些定向不

3、能满足用户需求时,用户可以在命令中用符号以在命令中用符号“”或或“”。部分。部分Linux系统不支持该变量。系统不支持该变量。v例例 $bc112 + 34146(345-11)*2668Ctrl-d$3.3.1 环境变量环境变量v用命令用命令env可以显示目前所有的环境变量。可以显示目前所有的环境变量。$env_=/usr/bin/envLANG=en_USLOGIN=liuximPATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbinUSER=liuximSHELL=/usr/bin/kshHOME=/home/liuximTERM=

4、vt100PWD=/home/liuxim$ 3.3.2 特殊变量特殊变量vShell定义了如下几个特殊变量定义了如下几个特殊变量用于用于执行执行Shell命令时存命令时存放命令及命令参数放命令及命令参数:v$0,$1,$2,$3,$4,$5,$6,$7,$8,$9v其中:其中:$0存放命令名,存放命令名,$1、$2、$3、$4、$5、$6、$7、$8、$9从左至右分别存放命令参数。从左至右分别存放命令参数。v命令命令shift用于移动位置参数,将用于移动位置参数,将$2中的内容移至中的内容移至$1,$3中的内容移至中的内容移至$2,$4中的内容移至中的内容移至$3,依次类推,依次类推,但位置

5、参数但位置参数$0不参加移位。不参加移位。vshift命令格式为:命令格式为:shift nvn表示向左移动参数的个数,默认值为表示向左移动参数的个数,默认值为1。3.3.2 特殊变量特殊变量v例:应用位置参数及例:应用位置参数及shift命令。命令。 $cat movelab1# this program show shiftecho $0echo $1,$2,$3,$4,$5,$6,$7,$8,$9;shiftecho $1,$2,$3,$4,$5,$6,$7,$8,$9;shiftecho $1,$2,$3,$4,$5,$6,$7,$8,$9;shiftecho $1,$2,$3,$4,

6、$5,$6,$7,$8,$9;shiftecho $1,$2,$3,$4,$5,$6,$7,$8,$9;shiftecho $1,$2,$3,$4,$5,$6,$7,$8,$9;shiftecho $1,$2,$3,$4,$5,$6,$7,$8,$9;shiftecho $1,$2,$3,$4,$5,$6,$7,$8,$9;shiftecho $1,$2,$3,$4,$5,$6,$7,$8,$93.3.2 特殊变量特殊变量$movelab1 11 22 33 44 55 66 77 88 99movelab111,22,33,44,55,66,77,88,9922,33,44,55,66,77

7、,88,99,33,44,55,66,77,88,99,44,55,66,77,88,99,55,66,77,88,99,66,77,88,99,77,88,99,88,99,99,$3.3.2 特殊变量特殊变量v下面是一些与位置参数有关的特殊变量:下面是一些与位置参数有关的特殊变量:l$#:能提供给脚本的位置参数个数。:能提供给脚本的位置参数个数。l$:当前:当前Shell脚本的进程号。脚本的进程号。l$!:上一个后台命令的进程号。:上一个后台命令的进程号。l$?:执行最后一条命令的退出状态。:执行最后一条命令的退出状态。l$*:位置参数字符串,所有位置参数字符串组成一个:位置参数字符串,所

8、有位置参数字符串组成一个大的字符串。大的字符串。l$:位置参数字符串,每个位置参数字符串都是一个:位置参数字符串,每个位置参数字符串都是一个单独的字符串。单独的字符串。3.3.2 特殊变量特殊变量v例例 $cat exerecho $1,$2,$3,$4,$5,$6,$7,$8,$9echo $#=$#echo $=$echo $!=$!echo $?=$?echo $*=$*echo $=$3.3.2 特殊变量特殊变量$exer 1 2 3 4 5 6 7 8 9 a bc1,2,3,4,5,6,7,8,9$#=11$=24056$!=14361$?=0$*=1 2 3 4 5 6 7 8

9、9 a bc$=1 2 3 4 5 6 7 8 9 a bc$3.3.3 用户自定义变量用户自定义变量v用户自定义变量用户自定义变量是用户根据自己的需要在是用户根据自己的需要在Shell中定义的中定义的临时变量。临时变量。v用户定义变量除数字之外还可以是字母、下划线和其他文用户定义变量除数字之外还可以是字母、下划线和其他文字,长度不限。用户定义变量要区分大小写。字,长度不限。用户定义变量要区分大小写。v用户自定义变量格式为:用户自定义变量格式为: variable-name=valuev在定义等式中等号两端不允许有空格,执行时将右端的计在定义等式中等号两端不允许有空格,执行时将右端的计算结果指

10、定给左端。如果用户变量值中有空格,必须用引算结果指定给左端。如果用户变量值中有空格,必须用引号将变量值括起来。号将变量值括起来。v用户变量的使用与环境变量一样,要在变量名前加符号用户变量的使用与环境变量一样,要在变量名前加符号“$”,表示要使用该变量的值。用户定义变量非常灵活,表示要使用该变量的值。用户定义变量非常灵活,需要改变时可以随时重新定义。需要改变时可以随时重新定义。3.3.3 用户自定义变量用户自定义变量v清除变量:如果所设置的变量不需要时可以清除。清除变量:如果所设置的变量不需要时可以清除。v格式为:格式为:unset variable-namev例例 先定义先定义exer的值为的

11、值为/home/liuxim/exer,然后清除,然后清除exer。$exer=/home/liuxim/exer$echo $exer/home/liuxim/exer$unset exer$echo $exer$3.3.3 用户自定义变量用户自定义变量v可以将字符与变量、变量与变量组合在一起使用。可以将字符与变量、变量与变量组合在一起使用。v组合格式分别为组合格式分别为char$variable,$var1$var2。v例:例: $d=day$echo “Sun$d, Mon$d, Tues$d, Wednes$d, Thurs$d, Fri$d, Satur$d”Sunday, Mond

12、ay, Tuesday, Wednesday, Thursday, Friday, Saturday$h=/home$me=/liuxim/exer$echo $h$me/home/liuxim/exer$3.3.3 用户自定义变量用户自定义变量v使用变量时如果不能确定该变量是否已经定义,可以用变使用变量时如果不能确定该变量是否已经定义,可以用变量测试语句:量测试语句: variable-name: -new-valuev表示如果没有定义则用新值(表示如果没有定义则用新值(new-value)定义;如果)定义;如果已经定义则维持原定义。已经定义则维持原定义。3.3.3 用户自定义变量用户自定义

13、变量v例例 首先设置首先设置state的值为的值为order,然后再引用。,然后再引用。$state=order$echo “Everything was in a state of $state:-disorder”Everything was in a state of order$unset state$echo “Everything was in a state of $state:-disorder”Everything was in a state of disorder$3.3.3 用户自定义变量用户自定义变量v命令替换命令替换是将一个是将一个Shell命令的输出作为另一个命令

14、的参命令的输出作为另一个命令的参数,还可以赋予变量。为了区别一般字符串,用倒单引号数,还可以赋予变量。为了区别一般字符串,用倒单引号括起命令。括起命令。v例例 $echo “Now my work directory is pwd”Now my work directory is /home/liuxim$time=date$echo $timeSun Mar 30 09:39:28 TAIST 20033.3.3 用户自定义变量用户自定义变量v双引号双引号内的内容如果包含内的内容如果包含$和单引号则保留和单引号则保留Shell中的定中的定义,包含倒单引号则作命令替换义,包含倒单引号则作命令替

15、换v单引号单引号内的内容完全为普通字符串,不作命令替换内的内容完全为普通字符串,不作命令替换v倒单引号倒单引号内的内容只能是命令内的内容只能是命令v例:例: $echo pwd/home/liuxim/project$echo pwdpwd$echo “pwd”/home/liuxim/project3.3.3 用户自定义变量用户自定义变量$var=123$echo $var123$echo “$var”123$echo $var$var$var=date;echo $varSun Mar 30 09:34:00 TAIST 2003$var=$(date) ;echo $vardate3.3

16、.4 显示变量显示变量v用命令用命令set可以显示所有变量,包括环境变量和临时变量。可以显示所有变量,包括环境变量和临时变量。v例例 $setFCEDIT=/usr/bin/edHOME=/home/liuximPS1=$ PS2= PS3=#? PS4=+ PWD=/home/liuximvar1=11var2=223.3.5 shell输入输入/输出命令输出命令v在在Shell中用中用read命令从标准输入读入数据并将读入的数命令从标准输入读入数据并将读入的数据赋值给变量。据赋值给变量。v命令格式:命令格式:read variable-name1 variable-name2,v命令的标准

17、输出是早已熟悉的命令的标准输出是早已熟悉的echo命令。命令。v例例 $read var1 var2 var3 var411 222 3333 4444 55555$echo $var1 $var2 $var311 222 3333$echo $var44444 555553.3.5 shell输入输入/输出命令输出命令$read var1 var2 var3 var411 22 33$echo $var1 $var2 $var311 22 33$echo $var4$v可见,输入的值太多会将多余的值全部赋予最后一个变量;可见,输入的值太多会将多余的值全部赋予最后一个变量;输入的值太少,后面的

18、变量被赋予空值。输入的值太少,后面的变量被赋予空值。vecho是换行标准输出语句。是换行标准输出语句。echo输出多个空格时必须用输出多个空格时必须用引号括起,否则再多的空格也被认为只有一个。引号括起,否则再多的空格也被认为只有一个。3.3.5 shell输入输入/输出命令输出命令vecho可以使用通配符:可以使用通配符:l“*”表示任意字符。表示任意字符。l“?”表示一个字符。表示一个字符。l“A%”表示表示A之后任意多个字符。之后任意多个字符。l“%A”表示表示A之前任意多个字符。之前任意多个字符。l“A-Z”表示表示A到到Z之间的任意字符。之间的任意字符。l“c”表示不换行,连续输出。表

19、示不换行,连续输出。l“”表示要显示反斜线表示要显示反斜线“”。l“n”表示换行输出。表示换行输出。3.3.5 shell输入输入/输出命令输出命令v例例 $echo Do you see that notice? It says Do you see that notice? It says $echo Do you see that notice? It says Do you see that notice? It says $echo *db2 db2red.pdf hlliu jobbegin lliu mbox project v7-dbacert.pdf x y1$echo db

20、*db2 db2red.pdf$echo a-z*db2 db2red.pdf hlliu jobbegin lliu mbox project v7-dbacert.pdf x y13.3.6 shell中的运算中的运算vShell提供基本的算术运算有(加)、(减)、提供基本的算术运算有(加)、(减)、*(乘)、(除)、(余数)。使用这些运算符时要用(乘)、(除)、(余数)。使用这些运算符时要用expr语句处理,只提供整数运算。需要注意的是在运算语句处理,只提供整数运算。需要注意的是在运算符的前后需留有空格。符的前后需留有空格。v例例: $expr 24 / 64$var=$(expr 12

21、4 * 2)$echo $var248$3.3.6 shell中的运算中的运算v也可以使用也可以使用$(计算式计算式)来进行数值运算,也只支持整数来进行数值运算,也只支持整数运算。运算。v例:例:var=$(13/4)echo $varecho $(13/4)3.4 Shell控制结构控制结构3.4 Shell控制结构控制结构v在在Shell中可以使用语句控制程序流程中可以使用语句控制程序流程。lif then elselcaselforlwhileluntillbreaklcontinueShell的测试判断功能的测试判断功能vtest和和可以用来测试一些条件是否成立,可以用来测试一些条件是

22、否成立, 更多用于更多用于if条件判断当中。条件判断当中。返回返回0表示成立表示成立。v例:我们检查当前目录下的例:我们检查当前目录下的file1和和file2文件是否存在文件是否存在v#lsvfile2 file3v#test e file1v#echo $?v1v#test e file2v#echo $?v0Shell的测试判断功能的测试判断功能v使用使用来进行判断时需要注意:来进行判断时需要注意:1.括号中每个符号之间都括号中每个符号之间都需要空格来分隔;需要空格来分隔;2.括号中的变量最好都用双引号括起来。括号中的变量最好都用双引号括起来。v注意:以下例子中的红色加号注意:以下例子中

23、的红色加号“+”代表空格。代表空格。v#+e+file1+v#echo $?v1v# e file2 v#echo $?v0v#+“$HOME” +=+ “/root”+v#echo $?v0Shell的测试判断功能的测试判断功能v数字类测试条件数字类测试条件ldata1 eq data2 当当data1等于等于data2时为时为trueldata1 ne data2 当当data1不等于不等于data2时为时为trueldata1 lt data2 当当data1小于小于data2时为时为trueldata1 gt data2 当当data1大于大于data2时为时为trueldata1 l

24、e data2 当当data1小于等于小于等于data2时为时为trueldata1 ge data2 当当data1大于等于大于等于data2时为时为trueShell的测试判断功能的测试判断功能v文件类测试条件文件类测试条件l-e file 当当file存在时为存在时为true l-d file 当当file存在且是一个目录时为存在且是一个目录时为truel-f file 当当file存在且是一个标准文件时为存在且是一个标准文件时为truel-L file 当当file存在且为符号链时为存在且为符号链时为truel-s file 当当file存在且文件大小大于存在且文件大小大于0时为时为t

25、rue l-r file 当当file存在且为可读时为存在且为可读时为truel-w file 当当file存在且为可写时为存在且为可写时为truel-x file 当当file存在且为可执行时为存在且为可执行时为truelfile1 nt file2 file1比比file2新时为新时为truelfile1 ot file2 file1比比file2时间早时为时间早时为trueShell的测试判断功能的测试判断功能v字符类测试条件字符类测试条件lstring1 = string2 当两个字符串相等时为当两个字符串相等时为truelstring1 != string2 当两个字符串不相等时为当

26、两个字符串不相等时为truel-z string 当字符串长度为当字符串长度为0时为时为truel-n string 当字符串长度非当字符串长度非0时为时为truev其他测试条件其他测试条件l! expression 当表达式当表达式expression为假时为为假时为truelexpression1 -a expression2 当表达式当表达式expression1和和expression1都为真时为都为真时为truelexpression1 -o expression2 当表达式当表达式expression1或或expression1为真时为为真时为true3.4.1 if then e

27、lse 语句语句vif then else语句提供条件测试。根据测试的条件执行相语句提供条件测试。根据测试的条件执行相应的一系列语句。应的一系列语句。v基本的基本的if语句格式为:语句格式为:if test-condition then commandsfiv语义表示为:如果测试条件(语义表示为:如果测试条件(test-condition)为真,)为真,则执行命令(则执行命令(commands)。)。3.4.1 if then else 语句语句v例例 $cat iftest1# This script exer iftest1if abc = abc then echo “ok”fi# Th

28、e script end$iftest1ok$3.4.1 if then else 语句语句v一般一般if语句格式为:语句格式为:if test-condition then commands1 else commands2fiv语义表示为:如果测试条件(语义表示为:如果测试条件(test-condition)为真,)为真,则执行命令(则执行命令(commands1);否则(测试条件);否则(测试条件test-condition为假)执行命令(为假)执行命令(commands2)。)。3.4.1 if then else 语句语句v例例$cat iftest2#This script is s

29、earch user echo Please type in the users nameread userif grep q $user /etc/passwdthen echo $user is the the system userelse echo $user is not the system userfi# The script end$3.4.1 if then else 语句语句$./iftest2Please type in the users nameliuxim 输入用户名输入用户名liuxim is the system user$./iftest2Please typ

30、e in the users nameguanzl 输入用户名输入用户名guanzl is not the system user$3.4.1 if then else 语句语句v扩充扩充if语句格式为:语句格式为:if test1-condition then commands1 else if test2-condition then commands2 fi else commands3fi3.4.1 if then else 语句语句v其中其中else if可以缩写成可以缩写成elif,若使用,若使用elif则可省略则可省略fi。if test1-condition then comm

31、ands1 elif test2-condition then commands2 else commands3fiv语义表示为:如果测试条件(语义表示为:如果测试条件(test1-condition)为真,)为真,则执行命令(则执行命令(commands1);否则再判测试条件);否则再判测试条件(test2-condition),如果为真,则执行命令),如果为真,则执行命令(commands2),如果测试条件(),如果测试条件(test2-condition)为假,则执行命令()为假,则执行命令(commands3)。)。3.4.1 if then else 语句语句v例例 用用cat命令显

32、示脚本命令显示脚本iftest3:$cat iftest3# This script exer iftest3#This script is search directoryecho The Program Begin, Please Input Directoryread direcif “$direc” = “/home/liuxim/project” then echo the directory=/home/liuxim/project elif “$direc” = “/home/liuxim” then echo the directory=/home/liuxim else ec

33、ho $direcfi# The script end$3.4.1 if then else 语句语句$./iftest3The Program Begin, Please Input Directory /home/liuxim/project 输入目录名输入目录名the directory=/home/liuxim/project$./iftest3The Program Begin, Please Input Directory /home/liuxim 输入目录名输入目录名the directory=/home/liuxim$./iftest3The Program Begin, Pl

34、ease Input Directory /home 输入目录名输入目录名/home$3.4.2 case语句语句vcase是一个多选择语句,根据变量与哪种模式匹配而执是一个多选择语句,根据变量与哪种模式匹配而执行相应的语句序列,采用相应的动作。行相应的语句序列,采用相应的动作。vcase语句的基本格式为:语句的基本格式为:case value in value 1)command11command12 command1n; value n)commandn1commandn2commandnn; esac3.4.2 case语句语句v例例 显示键盘输入字母。显示键盘输入字母。$cat cas

35、etest1# This is the script test case # test the key inputecho Please enter the letter you mantedread lettercase $letter ina) echo letter is a;b) echo letter is b;c) echo letter is c;d) echo letter is d;*) echo letter is between e and zesac# the script end3.4.2 case语句语句执行脚本:执行脚本:$./casetest1Please en

36、ter the leter you manteda 输入字母输入字母letter is a$./casetest1Please enter the leter you mantedb 输入字母输入字母letter is b$./casetest1Please enter the leter you mantedx 输入字母输入字母letter is between e and z$3.4.3 for语句语句vfor为循环语句。为循环语句。v基本格式为:基本格式为:for variable in list do commands donev其中其中variable是变量。如果变量值在列表中就执行

37、一次是变量。如果变量值在列表中就执行一次循环,完成循环,完成do到到done之间的所有命令。之间的所有命令。3.4.3 for语句语句v例:列表为变量。例:列表为变量。首先用首先用cat命令查看脚本内容:命令查看脚本内容:$cat fortest1# the script for testfor letter in x y zdo echo $letterdone# the script end$3.4.3 for语句语句执行脚本:执行脚本:$./fortest1xyz$3.4.3 for语句语句v例例 列表为字符串。列表为字符串。$cat fortest2# the script for t

38、estfor word in “Welcome to China”do echo $worddone# the script end$./fortest2Welcome to China3.4.3 for语句语句v例例 列表为列表为ls命令结果。命令结果。首先用首先用cat命令查看脚本内容:命令查看脚本内容:$cat fortest3# the script for testfor filedir in lsdo echo $filedirdone# the script end$3.4.3 for语句语句执行脚本:执行脚本:$./fortest3fortest1fortest2dortest

39、3$3.4.3 for语句语句v例例 列表为位置参数。列表为位置参数。首先用首先用cat命令查看脚本内容:命令查看脚本内容:$cat fortest4# the script for testfor posipara in $*do echo “Please Enter $posipara in this line”done# the script end$3.4.3 for语句语句执行脚本:执行脚本:$./fortest4 111 222 333 444Please Enter 111 in this linePlease Enter 222 in this linePlease Enter

40、 333 in this linePlease Enter 444 in this line$3.4.3 for语句语句vfor语句的另一种形式:语句的另一种形式:vfor (初始值初始值; 限制值限制值; 执行步长执行步长)vdovdonev这种这种for循环类似于循环类似于C语言,适用于确定循环次数的数值运语言,适用于确定循环次数的数值运算的循环体。算的循环体。3.4.3 for语句语句v$cat testivread nvs=0vfor (i=0; i =$n; i=i+1)vdos=$($s+$i)vdonevecho the sum = $sv$./testiv$4v$the sum

41、 = 103.4.3 for语句语句v嵌套语句格式:嵌套语句格式:for variable1 in list1do for variable2 in list2 do commands donedone3.4.4 while语句语句vwhile是一个不断执行一系列命令的循环语句。是一个不断执行一系列命令的循环语句。v基本语句格式为:基本语句格式为:while test-condition do commands donev当当while测试测试test-condition为真时,为真时,Shell进入进入while的主体反复执行,直到测试条件为假时才停止。其的主体反复执行,直到测试条件为假时才

42、停止。其中循环体在中循环体在do和和done之间。之间。3.4.4 while语句语句v例例 一般的循环应用。一般的循环应用。$cat whiletest1# the script is while testapple=0while $apple -lt 4 do apple=expr $apple + 1 echo “apple=$apple”done#the script end$3.4.4 while语句语句$./whiletest1apple=1apple=2apple=3apple=43.4.4 while语句语句v例例 常用常用while循环作周而复始的工作,要停止循环键入循环作周

43、而复始的工作,要停止循环键入Ctrl-D。下面是一个不断接受键盘输入的。下面是一个不断接受键盘输入的Shell script。$cat whiletest2# This script test whileecho “type Ctrl+d to terminate the script”echo “Please enter the wonderful place”counter=0while read placedo echo “$counter. $place is the wonderful place” counter=expr $counter + 1done# this script

44、 end3.4.4 while语句语句执行脚本:执行脚本:$./whiletest2type Ctrl+d to terminate the scriptPlease enter the wonderful placeParis0. Paris is the wonderful placeNew York1. New York is the wonderful placeShangHai2. ShangHai is the wonderful placeCtrl+d$3.4.5 until语句语句vuntil与与while一样,都是循环语句,但处理方式正好相一样,都是循环语句,但处理方式正好相

45、反,即条件为真时停止。在某些时候,反,即条件为真时停止。在某些时候,until语句有一定语句有一定优势。优势。v基本语句格式:基本语句格式:until test-conditiondo commandsdone3.4.5 until语句语句v例例 监控一个重要目录是否被删除。监控一个重要目录是否被删除。$cat untiltest1# this script until testecho “Please enter the controlleddir name:”read controlleddiruntil ! -d $controlleddir do sleep 2doneecho “Th

46、e $controlleddir is deleted!”# the script end3.4.5 until语句语句执行脚本:执行脚本:$./untiltest1Please enter the controlleddir name/home/leaderThe /home/leader is deleted!$3.4.6 break和和continue语句语句v使用使用break和和continue语句控制循环。语句控制循环。vbreak命令在作一些处理后跳出循环或跳出命令在作一些处理后跳出循环或跳出case语句。语句。如果是位于一个多层嵌套循环中,还可以指定跳出的循环如果是位于一个多层

47、嵌套循环中,还可以指定跳出的循环层数。层数。v命令格式:命令格式:break nvn为要跳出的循环层数,默认值为为要跳出的循环层数,默认值为1。vcontinue命令也是在循环中跳转,但与命令也是在循环中跳转,但与break不同的是,不同的是,它不是跳出循环,而是跳出循环步,回到循环头部继续执它不是跳出循环,而是跳出循环步,回到循环头部继续执行循环。行循环。v命令格式:命令格式:continue nvn为要跳出的循环层数,默认值为为要跳出的循环层数,默认值为1。3.4.6 break和和continue语句语句v例例 前面的例题,如果键入的地名是前面的例题,如果键入的地名是Beijin则用则用

48、break跳跳出出while,结束脚本。,结束脚本。$cat breaktest1# this is break test script echo type Ctrl+d to terminate the scriptecho Please enter the wonderful placecounter=0while read placedo echo $counter. $place is the wonderful place if $place = Beijin then break fi counter=expr $counter + 1done# this script end3.

49、4.6 break和和continue语句语句$./whiletest2type Ctrl+d to terminate the scriptPlease enter the wonderful placeParis0. Paris is the wonderful placeNew York1. New York is the wonderful placeShangHai2. ShangHai is the wonderful placeBeijin3. Beijin is the wonderful place$3.4.6 break和和continue语句语句$cat continue

50、test1# this is continue test script echo “type Ctrl+d to terminate the script”echo “Please enter the wonderful place”counter=0while read placedo echo “$counter. $place is the wonderful place” if “$place” = “Beijin” then continue fi counter=expr $counter + 1done# this script end3.4.6 break和和continue语

51、句语句$./whiletest2type Ctrl+d to terminate the scriptPlease enter the wonderful placeParis 0. Paris is the wonderful placeNew York1. New York is the wonderful placeShangHai2. ShangHai is the wonderful placeBeijin3. Beijin is the wonderful placeBerlin3. Berlin is the wonderful placeVenice4. Venice is t

52、he wonderful placeCtrl+d3.5 Shell函数函数3.5 Shell函数函数v除了在除了在Shell中可以定义变量之外,在中可以定义变量之外,在Shell中也可以定中也可以定义函数。义函数。vShell函数是将函数是将Shell的一些语句或命令集组合在一起形的一些语句或命令集组合在一起形成能完成特定功能的程序块。成能完成特定功能的程序块。v当当Shell脚本需要时可以直接调用。脚本需要时可以直接调用。vShell函数的基本格式为:函数的基本格式为:vfunc name( )v v commandsvv通常将函数看成是脚本中的一段代码,在使用函数之前必通常将函数看成是脚本

53、中的一段代码,在使用函数之前必须先定义该函数,使用时利用函数名直接调用。须先定义该函数,使用时利用函数名直接调用。3.5 Shell函数函数3.5 Shell函数函数例例 下面首先创建函数,然后调用函数。下面首先创建函数,然后调用函数。首先用首先用cat命令查看命令查看funcexer函数定义的脚本内容:函数定义的脚本内容:$cat funcexerabc ( ) echo “This is the function abc, param=$1”echo “The abc functon begin”abc 234echo “The abc functon end”# funcexer end

54、$3.5 Shell函数函数$./funcexerThe abc functon beginThis is the function abc, param=234The abc functon end$v执行函数时保留当前执行函数时保留当前Shell和内存信息,和内存信息,Shell脚本和函脚本和函数之间的参数传递利用变量直接传递。数之间的参数传递利用变量直接传递。v函数有两种方式可以返回到脚本中调用函数的控制部分:函数有两种方式可以返回到脚本中调用函数的控制部分:1.当函数正常执行到末尾时直接返回。当函数正常执行到末尾时直接返回。2.用用return语句语句返回时带值返回时带值0或或1,0表

55、示函数调用无错,表示函数调用无错,1表示有错。表示有错。3.6 Shell工具工具3.6 Shell工具工具vLinux操作系统提供了一些命令用于操作系统提供了一些命令用于Shell脚本的调试,脚本的调试,将这些命令称为将这些命令称为Shell工具。工具。v常用的有:常用的有:trap、logger、eval等。等。3.6.1 通知通知trapv通知通知trap是操作系统监控命令,用于在是操作系统监控命令,用于在Shell脚本中捕捉脚本中捕捉信号。信号。vtrap命令格式:命令格式:trap operateing signals 其中其中signals表示捕捉到的信号;表示捕捉到的信号;ope

56、rating是专门用来是专门用来处理捕捉到信号后所采取操作的函数,使用时用双引号处理捕捉到信号后所采取操作的函数,使用时用双引号(“”)将)将operateing括起来。括起来。v在在Linux系统中可以发出的系统中可以发出的signals信号及其描述如表信号及其描述如表3.1所示。所示。signal 描述描述0 0 退出退出shellshell,按,按Ctrl-DCtrl-D时产生。时产生。1 1 挂起(挂起(hanguphangup),按),按Ctrl-SCtrl-S时产生,表示通信挂起。时产生,表示通信挂起。2 2 中断(中断(interruptinterrupt),按),按DelDel

57、或或Ctrl-BreakCtrl-Break或或Ctrl-CCtrl-C时产生。时产生。3 3 退出(退出(QuitQuit)。)。4 4 非法命令(非法命令(illegal illegal instrutioninstrution)。)。5 5 跟踪跟踪traptrap(trace instructiontrace instruction)。)。6 IOT6 IOT命令。命令。7 EMIT7 EMIT命令。命令。8 8 异常的浮点格式(异常的浮点格式(floating point exceptionfloating point exception)。)。9 9 终止进程(终止进程(killk

58、ill),无法被忽略的信息。),无法被忽略的信息。 10 10 系统总线出错(系统总线出错(Bus errorBus error)。)。12 12 系统函数调用时提供的参数不当。系统函数调用时提供的参数不当。13 13 输出到管道时无进程接收。输出到管道时无进程接收。14 14 超时报警(超时报警(alarm timeoutalarm timeout)。)。15 15 软件结束信号。软件结束信号。16 16 用户自定义信号用户自定义信号1 1(SIGUSR1SIGUSR1)17 17 用户自定义信号用户自定义信号2 2(SIGUSR2SIGUSR2)18 18 子进程结束时发出通知(子进程结束

59、时发出通知(SIGCLDSIGCLD)19 19 电源掉电(电源掉电(SIGPWRSIGPWR)20 20 窗口大小发生改变(窗口大小发生改变(SIGWINSSIGWINS)21 sock21 sock条件变化(条件变化(SIGSOCKSIGSOCK)表表3.1 Linux系统中可以发出的系统中可以发出的signals信号及其描述信号及其描述3.6.1 通知通知trapv例例:vtrap “commands” 3 4表示如果捕捉到信号表示如果捕捉到信号3、4,则执行相应的则执行相应的commands命令。命令。vtrap “”2,3表示如果捕捉到信号表示如果捕捉到信号2、3则忽略信号则忽略信号

60、2、3,用户不终止该脚本。,用户不终止该脚本。vtrap 2、3表示复位信号表示复位信号2、3,用户可以终止该脚本。,用户可以终止该脚本。3.6.1 通知通知trap$cat traptest1#!/bin/bashdeletedir () echo “delete directory function” rm /home/liuxim/exer exitcounter=0trap “deletedir” 2while : do counter=expr $counter + 1 echo $counter done3.6.1 通知通知trap执行脚本:执行脚本:$ ./traptest112

61、3129delete directory function $3.6.3 loggervLinux系统的一个特征是存在日志文件。日志文件通常位系统的一个特征是存在日志文件。日志文件通常位于目录于目录/var/log下,取名为下,取名为messages。v当系统管理员需要记录日志时,可使用命令当系统管理员需要记录日志时,可使用命令logger用于发用于发送需要记录的消息。送需要记录的消息。vlogger命令格式:命令格式:logger i messagevi选项表示在消息中记录发送消息的进程号。选项表示在消息中记录发送消息的进程号。3.6.4 evalveval是一个在是一个在Shell下执行的

62、命令,在命令前加上下执行的命令,在命令前加上eval,eval会将字符串解释成命令并执行。会将字符串解释成命令并执行。v例:例:v$date_1=“date”v$echo $date_1vdatev$eval $date_1vTue Apr 1 17:11:40 TAIST 2003 v$3.7 Shell Script编程应用实例编程应用实例3.7 Shell Script编程应用实例编程应用实例v下例是按下例是按/etc/hosts文件中的文件中的IP地址地址ping所有主机的脚所有主机的脚本。本。$cat pinghostmore /etc/hosts |grep -v # |awk p

63、rint $1 |while read ndo ping -cl $ndone$3.7 Shell Script编程应用实例编程应用实例v下例是一个定期查看邮箱的程序,当邮箱的内容变化时,下例是一个定期查看邮箱的程序,当邮箱的内容变化时,程序行显示程序行显示“you have mail”。$cat checkmailMAIL=/var/mail/whoami #system dependentt=60x=ls -l $MAILwhile :do y=ls -l $MAIL echo $x $y x=$y sleep $tdone | awk if ($5$14) print you have

64、mail3.8 本 章 小 结本章小结本章小结v本章主要讲述了本章主要讲述了Shell脚本的编制。脚本的编制。v首先讲述了首先讲述了Shell的主要功能及的主要功能及B-Shell、C-Shell、K-Shell的特征;然后介绍了如何编写一个的特征;然后介绍了如何编写一个Shell脚本程序,脚本程序,涉及到了变量、语法结构、函数的用法以及一些相关工具涉及到了变量、语法结构、函数的用法以及一些相关工具的使用。最后介绍了一些典型的的使用。最后介绍了一些典型的Shell脚本实例。脚本实例。v熟练掌握熟练掌握Shell脚本程序的设计,对日常系统维护有很大脚本程序的设计,对日常系统维护有很大帮助,很多重复进行的、繁琐的事情,都可以交给帮助,很多重复进行的、繁琐的事情,都可以交给Shell脚本程序,实现高效率的系统管理。脚本程序,实现高效率的系统管理。

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

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

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