您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第4章 Shell程序设计
Linux操作系统精讲大连理工大学软件学院邱铁综合楼413,Tel:0411-87571632E_mail:qiutie@dlut.edu.cn参考教材:邱铁、于玉龙、徐子川编著《Linux应用与开发典型实例精讲》清华大学出版社.2010.5第4章Shell程序设计学习本章要达到的目标:1.学会使用Shell编程,能够编写Shell脚本程序;2.掌握Shell编程中用到的变量、流程控制语句、常用命令、特殊符号;3.基本学会使用Shell脚本函数。4.1Shell编程简介Shell提供了一种以脚本文件的方式来实现之,将所有需要执行的命令按照类似于编程的方法写到一个文件中,当需要使用时,只需要运行这个文件即可完成指定的任务Shell脚本文件的运行同可执行文件的使用方法相同,在命令提示符下输入文件的路径即可运行4.2系统变量4.3条件测试条件测试可以判断脚本程序运行的状态。它常用于条件分支,以便在不同的运行状态下执行不同的命令。[param1判断符号param2][判断符号param]4.3.1文件状态测试-bfilename判断文件filename是否为块设备,若文件不存在返回假。-cfilename判断文件filename是否为字符设备,若文件不存在返回假。-dpathname判断路径pathname是否为目录,若路径不存在返回假。-epathname判断路径pathname是否存在。-ffilename判断文件filename是否为真会文件,若文件不存在返回假。-gpathname判断路径pathname是否设置了SGID位,若路径不存在返回假。-hfilename判断文件filename是否为链接文件,若文件不存在返回假。-kpathname判断路径pathname是否设置了“粘滞”位,若路径不存在返回假。-pfilename判断文件filename是否为管道文件,若文件不存在返回假。-rpathname判断路径pathname是否为可读,若路径不存在返回假。-sfilename判断文件filename的尺寸是否大于0,若文件不存在返回假。-Sfilename判断文件filename是否是Socket,文件不存在返回假。-upathname判断路径pathname是否设置了SUID位,若路径不存在返回假。-wpathname判断路径pathname是否为可写,若路径不存在返回假。-xpathname判断路径pathname是否为可执行,若路径不存在返回假。-Opathname判断路径pathname是否为当前用户所拥有,若路径不存在返回假。-Gpathname判断路径pathname的用户组是否为当前用户所在组,若路径不存在返回假。file1-ntfile2判断文件file1是否比文件file2新。file1-otfile2判断文件file1是否比稳健file2旧。4.3.2逻辑操作param1–aparam2逻辑与。param1–oparam2逻辑或。!param逻辑非。4.3.3字符串测试-zstring判断字符串string是否为空串,即长度为0。-nstring判断字符串string是否为非空串。string1=string2判断字符串string1和string2是否相等。string1!=string2判断字符串string1和string2是否不等。string1string2按字符编码表排序,字符串string1是否在string2之前。string1string2按字符编码表排序,字符串string1是否在string2之后。4.3.4数值测试val1–eqval2判断val1和val2的数值是否相等。val1–neval2判断val1和val2的数值是否不等。val1–ltval2判断val1是否小于val2。val1–leval2判断val1是否小于等于val2。val1–gtval2判断val1是否大于val2。val1–geval2判断val1是否大于等于val2。4.4Shell流程控制语句流程控制包括条件执行、循环、分支执行。4.4.1if语句if…;then……elif…;then……else……fi4.4.2case语句casestrinpattern)dosomething;;……esac4.4.3while语句while…;do……Doneuntil…;do……done4.4.4for语句forvarinstr1str2…;do……done4.5Shell编程中的常用命令与符号4.5.1read命令命令的语法:read[参数]变量名常用的参数如下:-ttimeout设定超时时间。-pprompt设定提示信息,该提示信息将会显在光标前。4.5.2select命令selectvarinstr1str2…;dobreak;done4.5.3花括号花括号是一种强制的整体标识,可以让一个非整体的字符串强制的解释成一个整体{catabc.txtecho“aaa”}4.5.4引号单引号可以取消所有的转义符号、通配符和分隔符,双引号取消通配符和分隔符的转义,但对于变量依然进行转义4.5.5注释注释语句所在行的第一个字符必须为“#”,其后是注释的内容。4.6函数Shell中函数被看成是一个小的脚本程序,仅在当前脚本内部进行调用funname(){……}4.7应用实例训练例1.需要完成一个程序,用户输入百分制的分数,之后返回“A”“B”“C”“D”“E”的等级。其中,A等级为90至100分,B等级为80至89分,C等级为70至79分,D等级为60至69分,E等级为0至59分。needquit=0while[$needquit-eq0]doechoPleaseinputthescorereadscorecase$scorein100|9[0-9])echoVeryGood;;8[0-9])echoGood;;7[0-9])echoMiddle;;6[0-9])echoPass;;[1-5][0-9])echoFailure;;quit|q)echoQuitneedquit=1;;*)echoWrongInput!;;esacechodone例2.完成一个文件操作,根据用户指定的目录,删除其中所有文件名以“.c”结尾的文件,若这些文件删除后,目录中没有其他的文件,则将该目录也一并删除。foriin$*;dofind“$i”–name“*.c”–execrm–r–f{}\;[“$i/*”=$i/*]&&{rmdir“$i”echo“DeleteDirectory$i”}done思考与练习思考Shell编程与Shell命令之间的关系。阅读资料,了解Shell启动的流程,体会Shell脚本程序在Shell启动过程中的作用。用Shell编程的形式完成下列程序:1.输出用户通过命令行参数形式提供的多个整数的平均数。具体调用格式如下:$./avg12345678Average:452.文件备份。备份用户指定的文件,将文件备份到目录“文件名_backup”中(若目录不存在则自动建立),备份文件的文件名格式为“文件名_bak_年月日_时分秒”。3.将用户提供的二进制数转化为十进制数。(选作)具体的调用格式如下:$./bin2dec10011001(b)=9(d)$./bin2dec222222isnotavaluablebinarynumber.
本文标题:第4章 Shell程序设计
链接地址:https://www.777doc.com/doc-5099679 .html