shell----编程实例.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:28 大小:138KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

shell----编程实例.doc

shell----编程实例.doc

预览

免费试读已结束,剩余 18 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

1.判断一个文件是否是可执行文件,且判断能否在PATH中找到,有三种结果(一)找到且可执行0(二)非情况一(2)没找到或者是不可执行1(3)没找到2函数in_path:判断传入文件是否可执行,若可执行(且存在)返回0,否则返回1;分析:为测试传入文件是否在PATH所有的目录中,需取得PATH中的每个路径,可用循环,但需要设定环境中的分隔符(借助环境变量IFS)为PATH中的分隔符冒号”:”注:$IFS输入分隔符.当shell读取输入数据的时候,会把一组字符看做是单词之间的分隔字符,它们通常是空格,制表符,和换行符.函数调用方式为:in_pathfilenamein_path(){cmd=$1#$1为函数的参数1,以此类推retval=1#定义返回值变量oldIFS=$IFSIFS=:#设置新的IFS,并保存原来的以恢复使用fordirectoryin$PATH#for循环结构二:for–indoif[-xdirectory/$cmd];then#if条件语句之同行表示以分号隔开retval=0#-x判断文件有是否有可执行权限donedoneIFS=$oldIFS#恢复原来IFS,returnretval}注:1.函数的结构,没有形参2.变量的引用需要符号$,而变量的定义或赋值则不需要。3.赋值要无间隙,条件要间隙改进:1.将路径、分隔符均作为函数的参数传入,应用得到扩展。补充,in_path函数不能对绝对路径的文件处理,需写个函数对这一情况单独处理checkForCmdInPath(){var=$1#首先判断传入的非空串是否为绝对路径,即检测第一个字符是不是”/”,如果是,直接测–xif[$var!=“”];then#条件等价于-n$varif[“${var%${var#?}}”=‘/’];then#等价于$(echo$var|cut-c1)if[!-x$var];thenreturn1#notfoundornotexecutablefielif!inpath$var;thenreturn2#notfoundinPATHfifi}注:此函数让人一头雾水,详解如下:表达式${var%${var#?}}作匹配用,分解为${var%expr}${var#expr},expr为正则表达式(?匹配单一字符)后者(带#的)返回expr与var匹配成功位置之后的所有内容,此处为var中第一字符之后的所有。前者(带%的)返回expr与var匹配成功位置之前的所有内容,此处应为var的第一个字符。等价于$(echo$var|cutc1)即取第一字符。等价于${var:beginpos:size}中beginpos=0,size=1时的结果。var的符号放在外面了,假设$var为$1,则表达式表示为${1%${1#?}}关于if的条件判断与C语言中的理解不一致,反映在上述的elif语句中的条件。理解如下:shell中的if条件可以是表达式(需加方括号[]),另外还可以是命令或函数(不需方括号),当命令执行成功时会后继执行具体操作,经测试,C语言中所说的true在shell中用0表示,即if0,才执行then,因为linux下的程序实现都是当返回0时表执行成功。若函数中没有返回值,则它默认返回0,表执行成功。函数的编写若遵从以上的原则,则对条件的理解依旧像C语言中的TRUE,FALSE一样理解==============完善程序代码=====================================#!/bin/bashin_path()...#函数实现区域处理不路径返回0表找到、可执行,否则返回1###############################checkForCmdInPath()...#函数实现区域处理带路径和不带路径的返回1表没找到或不可执行,返回2表没找到。默认0表找到#####################################代码执行起始位置##############if[$#-nq1];thenecho“Usage:$0command”#$0表此执行文件(具体内容以执行此文件时的输入串为准)exit0fi#调用函数,并经第一个参数传给函数checkForCmdInpath$1#对函数返回的结果进行判断$?为函数的返回值,case$?in#case控制结构的格式,注意红色部分。0)echo“foundinPATH”;;1)