4 SHELL编程.ppt

上传人:qwe****56 文档编号:70019378 上传时间:2023-01-14 格式:PPT 页数:42 大小:821KB
返回 下载 相关 举报
4 SHELL编程.ppt_第1页
第1页 / 共42页
4 SHELL编程.ppt_第2页
第2页 / 共42页
点击查看更多>>
资源描述

《4 SHELL编程.ppt》由会员分享,可在线阅读,更多相关《4 SHELL编程.ppt(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、SHELL编程编程授课教师:张莹E_mail:内容提要内容提要_Shell简介l什么是ShelllShell脚本编写lShell脚本运行_Shell的输入与输出lecholreadl管道l重定向内容提要(续)内容提要(续)_Shell程序设计的语法l变量l条件测试l程序控制流l函数l内嵌命令_Shell程序设计实例CD管理器Shell简介简介_什么是Shelll一个做为用户与Linux系统之间的操作接口程序,允许用户向操作系统输入需要执行的命令;l一种高级、解释性程序设计语言_Shell的种类lBourne shell(sh)lC shell(csh)lKorn shell(ksh)lBour

2、ne Again shell(bash)Shell简介(续)简介(续)_vi编辑器编写shell脚本文件example1#!/bin/bashecho“You are welcome to use bash”echo“Current work directory is$PWD”echo“You are$LOGNAME”_执行shell脚本l输入定向到shell脚本$/bin/bash 脚本名l以脚本名作为参数$脚本名 参数l将shell脚本的权限设置为可执行l$chmod u+x example1l$./example1_shell通配符l?通配单个字符,如 ls tes?.txtl *通配所

3、有字符/字符串,如 ls tes*.*l set 通配方括号中任何一个单个字符,如ls testfx.*l set 通配不包括号方括号内的任何单字符,如ls testfx.*l 通配大括号内的任何字符串,如ls test,t1,t2.*#!/bin/bashfunction fun1().funciton funn().函数定义函数定义主过程主过程shell类型类型Shell的输入与输出的输入与输出_echolecho string_readlread variable1 variable2 .程序举例:echoexample.sh_管道l格式:命令1|命令2l功能:将命令1执行的输出作为命令

4、2执行的输入l举例lls-l|grep hello_输入、输出重定向l格式:、l文件描述符:0标准输入;1标准输出;2标准错误输出l举例lls l lsoutput.txtlkill HUP 1234 killout.txt 2 killerr.txtlcat bye.txt_teeltee -a files 程序举例:tee.shShell程序设计的语法程序设计的语法变量变量_shell变量的特点lshell变量使用之前不需要事先对它进行声明,在第一次使用它的时侯创建它。lshell变量默认情况下,是字符串类型。lshell变量名区分大小写。l弱类型。_shell变量l赋值l方式一:变量值(

5、等号两侧不能有空格)例1:a=”hello”、a=abc、b=9+1、a2=3、a=(1 2 3 4 5)引号l方式二:带测试的变量赋值 例1:zhisub.sh 例2:zhizhi.sh 例3:zhiadd.sh 例4:zhiquery.sh_变量引用l格式:$变量名、$变量名l程序:variablel举例lecho$helloecho$hello_worldlecho$a0echo$a*echo$alecho“$a*”echo“$a”l$#$#*l$name#pattern$name#patternl$name%pattern$name%patternl$#nameil$#name*$#n

6、amel程序:paraShell程序设计的语法程序设计的语法变量变量Shell程序设计的语法程序设计的语法环境变量环境变量_.bash_profile:设置了环境变量和文件掩码_.bashrc:每次启动bash时便会执行它。_.bash_logout,它仅在退出注册的时候运行 环境变量说明$HOME当前用户登录的子目录$PATH以冒号分隔的用来搜索命令子目录清单$LOGNAME用户登录名$TERM终端类型$LD_LIBRARY_PATH寻找库的路径,以冒号分隔$SHELLSHELL的路径名$PS1命令提示符,通常是$字符$PS2辅助提示符,通常是字符$IFS输入区的分隔符Shell程序设计的语

7、法程序设计的语法系统变量系统变量环境变量说明$n$1 表示第一个参数,$2 表示第二个参数.$#命令行参数的个数$0当前程序的名称$?前一个命令或函数的返回码$*以参数1 参数2.形式保存所有参数$以参数1 参数2.形式保存所有参数$!上一个命令的PID$脚本程序的进程PID程序举例:try_var latestShell程序设计的语法程序设计的语法条件测试条件测试_testtestif test f file.cthen fi_ if -f file.c then fil注意在使用方括号”测试条件时,方括号要与测试条件之间留出空格。字符串比较类_比较相等或不等的时侯,符号两边要与字符串用空格

8、符相隔开string1=string2如果两字符串相同,则结果为真string1!=string2如果两字符串不相同,则结果为真-n string如果字符串不是空,则结果为真-z string如果字符串是空,则结果为真算术比较类expression1 eq expression2如果两个表达式相等,则结果为真expression1 ne expression2如果两个表达式不等,则结果为真expression1 gt expression2如果前一个表达式大于后一个表达式,则结果为真expression1 ge expression2如果前一个表达式大于或等于后一个表达式,则结果为真expre

9、ssion1 lt expression2如果前一个表达式小于后一个表达式,则结果为真expression1 le expression2如果前一个表达式小于或等于后一个表达式,则结果为真!expression取表达式的非,即表达式为假,则结果为真文件测试类文件条件测试文件条件测试 结果结果-d file如果文件是一个子目录,则结果为真如果文件是一个子目录,则结果为真-e file如果文件存在,则结果为真如果文件存在,则结果为真-f file如果文件是一个普通文件,则结果为真如果文件是一个普通文件,则结果为真-g file如果文件的如果文件的set-group-id被设置,则结果为真被设置,则

10、结果为真-r file如果文件可读,则结果为真如果文件可读,则结果为真-s file如果文件的长度不为如果文件的长度不为0,则结果为真,则结果为真-u file如果文件的如果文件的set-user-id被设置,则结果为真被设置,则结果为真-w file如果文件可写,则结果为真如果文件可写,则结果为真-x file如果文件可执行,则结果为真如果文件可执行,则结果为真控制结构控制结构_根据某个条件的判断结果,改变程序执行的路径。_常见分支结构liflcase_常见循环结构lforlwhileluntilif分支分支_格式_说明l中括号部分可省略;_举例 if test -f$1 then echo

11、$1 is an ordinary file.else echo$1 is not an ordinary file.fiif if 条件条件1 1thenthen 命令命令#可以是多条语句可以是多条语句 elifelif 条件条件2 2thenthen 命令命令#可以是多条语句可以是多条语句 elseelse 命令命令#可以是多条语句可以是多条语句 fifi#结束标志结束标志 练习:练习:if分支分支_if语句l例如:_if.sh_冒号l例如:colon_elseif语句l例1:elseif1.shl例2:elseif2.sh比较elseif1.sh、elseif2.sh有什么不同?case

12、分支分支_格式_说明:l“条件”可以是变量、表达式、shell命令等;l“模式”为条件的值,并且一个“模式”可以匹配多种值,不同值之间用竖线(|)联结;l“模式”中可以使用通配符l一个模式要用双分号(;)作为结束;l以逆序的case命令(esac)表示case分支语句的结束 case case 条件条件 inin模式模式1)1)命令命令1 1;模式模式2 2)命令命令2 2;.模式模式n n)命令命令n n;esacesac#结束符结束符练习:练习:case分支分支_练习1lcase1.sh_练习2:合并匹配模版lcase2.sh_练习3:多语句执行lcase3.shfor循环循环_格式_说明

13、:l“列表”为存储了一系列值的列表,随着循环的进行,变量从列表中的第一个值依次取到最后一个值;l列表的值可以全部列出,也可用通配的方式,甚至可以是某命令的输出值(如$(ls))l如果中括号中的部分省略掉,Bash则认为是“in$”,即执行该程序时通过命令行传给程序的所有参数的列表。le1,e2,e3是算术表达式。即:先按算术运算规则计算表达式e1;接着计算e2,如果e2值不为0,则执行命令表中的命令,并且计算e3;然后重复,直至e2为0,退出循环。for for 变量变量 in in 列表列表 dodo 命令表命令表donedonefor for 变量变量 in in 文件正文件正则表达式则表

14、达式dodo 命令表命令表donedonefor(e1;e2;e3)for(e1;e2;e3)dodo 命令表命令表donedone练习:练习:for循环循环_练习1lfor1.sh_练习2lfor3.sh_练习3lfor2.shwhile/until循环循环_格式_说明:lwhile循环中,只要条件为真,就执行do和done之间的循环命令;luntil循环中,只要条件不为真,就执行do和done之间的循环命令,或者说,在until循环中,一直执行do和done之间的循环命令,直到条件为真;_break命令lbreak命令使程序从循环体中退出来。l语法结构:break n _continue命

15、令lcontinue命令跳过循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。l语法结构:continue n _exit命令lExit命令是立即退出正在执行的shell脚本,并设定退出值。l其语法格式是:exit n _:冒号命令l冒号命令是一个空命令,它的执行结果永远是真,相当于true的一个假名。如如 while:相当于相当于while truewhile/until while/until 条件条件dodo 命令命令#可以是多条语句可以是多条语句donedone练习:练习:while/until循环循环_练习1:利用while实现口令检查lwhile1_练习2:利用while

16、实现定值循环lwhile2_练习3:利用until实现登录用户名检验luntil_练习4:利用continue、break改变执行过程l利用continue删除当前路径下fred开头的文件lcont1lcontinue外跳嵌套层数lcont2lcont3l利用break删除当前路径下fred开头的第一个目录lbreak函数函数_格式l定义l引用_说明l调用函数之前,必须先定义函数。l函数内部参数的读取:$*$#$0$1$2$3$4$5 l$0为执行脚本的文件名;l$1是传递给函数的第1个参数;l$#为传递给函数的参数个数;l$*和$为传递给函数的所有参数 l使用return命令返回数字值;也可

17、以将返回值保存在一个全局变量中,返回;如果没有return命令,则函数返回值是函数中最后执行命令的退出状态码;l函数内部声明的变量默认为全局变量;l使用local关键字声明的变量为局部变量(如 local var=“var”)l如果局部变量与全局变量同名,则在函数内部局部变量覆盖全局变量。function function 函数名()函数名()命令命令 函数名函数名 参数参数1 1 参数参数2.2.参数参数n n 练习:函数练习:函数_一个简单的函数lfunction_函数中定义局部变量llocal_函数中返回值lreturnFunc命令表命令表_AND命令表l格式:条件1&条件2&条件3&l

18、执行过程:从左向右顺序执行,直到某一条件为假,不再执行后面的语句。_OR命令表l格式:条件1|条件2|条件3|l执行过程:从左向右顺序执行,直到某一条件为真,不再执行后面的语句。_AND和OR命令表l格式:条件1|条件2&条件3&条件4|条件5l执行过程:从左向右顺序执行,每一次以某个命令(&/|)为中心进行判断,判断的结果作为下一个命令(&/|)的一个条件,直到命令表结束为止。_语句块l格式:条件1&语句块 练习练习_练习1:and列表land_list._练习2:or列表lor_list_练习3:语句体get_confirm&grep-v$cdcatnum,$title_file$temp

19、_file mv$temp_file$title_file grep-v$cdcatnum,$tracks_file$temp_file mv$temp_file$tracks_file cdcatnum=echo Entry removed内嵌命令内嵌命令_Shell命令l外部命令:可以在命令提示符处执行的命令。l内嵌命令:在shell内部实现的,不能为外部程序调用。内嵌命令内嵌命令_echo命令l功能:输出一段字符串,并在输出的时侯增加一个换行符。l举例:lecho-n“Output Message”#去掉后面的换行符lecho-e“Output Messagec”#-e的作用使用字符串的

20、为转义符_printf命令l功能:格式化输出字符串。l格式:printf“format string”para1 para2 lformat string是由各种可打印字符,转义符,字符转换限定符组成。内嵌命令内嵌命令_eval命令l功能:将参数连接成命令让shell执行,并把命令返回状态作为自己返回状态。l举例leval echo hello_exec命令l功能l用来以另一个不同的程序替换掉当前的shelll修改当前文件描述符。(这种功能很少用)l举例:lexec./another.sh#exec不会执行,而执行another.sh。lexec 3file#文件描述符3被打开,以便从文件fi

21、le中读取数据内嵌命令内嵌命令_expr命令l功能:将其参数作当一个表达式来进行算术求值。l举例lvar1=expr$var+1#等价于$($var+1))l注意l运算符号和参数之间要有空格分开;l通配符号(*),在作为乘法运算符时要用、“”、符号修饰_let命令 l格式:let arg1 arg2.l例子1:let a=4+3l例子2:arithl说明:l与expr命令相比,let命令更简洁直观l当运算符中有、&、|等符号时,同样需要用引号(单引号、双引号)或者斜杠来修饰运算符内嵌命令内嵌命令_set命令l功能:shell设定参数变量。l举例:set_unset命令l功能:从环境变量中删除变

22、量和函数,但不能设置只读变量。l举例:unset_export命令l功能:将参数变量导入shell中,成为环境变量l举例1:export1.sh、export2.shl举例2:father child内嵌命令内嵌命令_shift命令l功能:脚本位置参数n+1到$#被重命名为$1到$#-1l举例:打印参数值shift_trap命令l功能:接收信号后,采取相应行动l格式:trap command signall例1:trap rm f$tmpFile EXITl例2:trap内嵌命令内嵌命令_umaskl功能:设置用户默认文件创建访问许可l例1:umask 0666#创建l例2:umask#显示_

23、waitl功能:等待一个用户子进程完成l例1:wait_exit nl功能:让脚本以退出码n结束运行l例1:exit 0_returnl功能:退出函数并返回给定值n内嵌命令内嵌命令_timesl功能:用户脚本或者系统命令所运行时间l举例:times ls-l_typel功能:查询命令是否有效,是否为内嵌命令l例1:type mycmdl例2:type lsl例3:type pwdl例4:type date_ulimitl功能:设置运行在shell上进程可使用资源的限制l例1:ulimit a#显示当前限制l例2:ulimit n 512#设置进程允许打开文件数=512Shell脚本调试脚本调试

24、_基本格式lbash option 脚本文件名l-e:如果命令失败则退出l-n:读入命令但不执行l-u:置换时将未设置的变量看作出错l-v:读入shell并显示l-x:执行命令,并把命令、参数显示出来_举例Shell程序设计实例程序设计实例CD管理器管理器_运行效果演示_总体框架l初始化l主程序while$quit!=y;do set_menu_choice case$menu_choice in a)add_records;r)remove_records;f)find_cd y;u)update_cd;c)count_cds;l)list_tracks;b)more$title_file

25、get_return;q|Q)quit=y;*)echo Sorry,choice not recognized;esacdonel结束函数调用过程函数调用过程(1)insert_title()(2)add_record_tracks()(3)insert_track()函数功能:计算函数功能:计算CDtrack的总数的总数命令:命令:wc关键技术关键技术grep$cdcatnum,$tracks_file$temp_file关键技术关键技术grep-v$cdcatnum,$tracks_file$temp_file寻找寻找CD和和它所包它所包含的含的track引号引号_双引号l由双引号括起来

26、的字符(除$、倒引号()和反斜线()外)均作为普通字符对待。l使用$var会进行名-值的转换_单引号l由单引号括起来的字符都作为普通字符出现l使用$var不会进行名-值的转换_倒引号l倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令行,并以它的标准输出结果取代整个倒引号部分。l倒引号还可以嵌套使用。但应注意,嵌套使用时内层的倒引号必须用反斜线()将其转义。返回expr算术求值算术求值表达求值表达求值说明说明表达式表达式1|1|表达式表达式2 2按位求或按位求或表达式表达式1&1&表达式表达式2 2按位求与按位求与表达式表达式1=1=表达式表达式2 2等于等于表达式表达式1 1 表达式表达式2 2大于大于表达式表达式1=1=表达式表达式2 2大于或等于大于或等于表达式表达式1 1 表达式表达式2 2小于小于表达式表达式1=1 字符$IFS输入区的分隔符$0shell脚本程序的名字$#传递到脚本程序的参数的个数$脚本程序的进程ID参数变量说明$1,$2,参数1,参数2,$*一个全体参数组成的清单,这是一个独立的变量,各参数之间用环境变量IFS中的第一个字符分隔开。$“$*”的一种变量,它不使用IFS环境变量。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁