- 论坛徽章:
- 0
|
由于对gawk读了错误的文件后,报错的形式看了不爽写了一个检查文件是否存在的函数。
该函数是我写的一个几百多行的gawk脚本中的一个模块函数,不过是花时间最多的一部分,目前功能
可以实现,支持文件名中不含这样的一些<, >, {, }, [, ],.,=等特殊符号的数据文件名。
中间用到了一些动态正则表达式,如下:
#if(CfgFile~/^\.\//)
#{rep=sprintf("./%s\\>",substr(CfgFile,3));printf "rep %s\n",rep}
#else
#rep="\\<[ \t]*" CfgFile "\\>"
rep=sprintf("%s\\>",CfgFile)
if(tmpRes!~rep)
虽然现在功能可以实现,但是我对动态正则表达式有些疑惑,
就是像#rep="\\<[ \t]*" CfgFile "\\>"这种表达式,不能对CfgFile是绝对路径/xxx/xxx,或者相对路径
的./xxx,起作用,就是if(tmpRes!~rep)不能正确判断!
但是将rep改为这样就可以了"[ \t]*" CfgFile "\\>"
还请各位高手指点迷津啊
下面有一些注释掉的部分,放在中间,能看见我的修改的转变,也就没有去掉
格式不好,见谅
---------------------------------------------------------------------------------------------------------
- #main for test
- BEGIN
- {
- for(i=1;i<ARGC;i++)
- sts=CheckCfgFile(ARGV[i])
- }
- #
- #支持函数 检查脚本配置文件是否存在
- #
- function CheckCfgFile(CfgFile,tmpCmd,tmpRes,retSts,idx,rep)
- {
-
- if(CfgFile~/[/][/]+/)
- {
- printf "ERROR: The path of \"%s\" is not true!\n",CfgFile>"/dev/stderr"
- printf "\tPlease check the path of \"%s\"\n" ,CfgFile>"/dev/stderr"
- retSts =1
- return retSts
- }
- else if(CfgFile~/[^/]\/$/)
- {
- printf "ERROR: \"%s\" is not a ordinary file!\n",CfgFile>"/dev/stderr"
- printf "\tIt's maybe a directory file!\n" >"/dev/stderr"
- retSts =2
- return retSts
- }
-
- idx=match(CfgFile,/[^/]+$/)
- #if(CfgFile!~/^\.\//)
- if(idx&&index(CfgFile,"/"))
- {
- tmpCmd=sprintf("echo %s%s",substr(CfgFile,1,idx-1),"*")
- #printf "tmpCmd %s\n",tmpCmd
- }
- else
- {
- tmpCmd=sprintf("echo %s","*")
- #printf "tmpCmd %s\n",tmpCmd
- }
- #tmpCmd=sprintf("ls -ld %s ",CfgFile)
- tmpCmd | getline tmpRes
- #printf "tmpRes %s\n",tmpRes
- close(tmpCmd)
- #if(CfgFile~/^\.\//)
- #{rep=sprintf("./%s\\>",substr(CfgFile,3));printf "rep %s\n",rep}
- #else
- #rep="\\<[ \t]*" CfgFile "\\>"
- rep=sprintf("%s\\>",CfgFile)
- if(tmpRes!~rep)
- {
- printf "ERROR: \"%s\" is not exist!\n",CfgFile>"/dev/stderr"
- printf "\tPlease check it!\n" >"/dev/stderr"
- retSts =3
- return retSts
- }
-
- tmpCmd=sprintf("ls -ld %s",CfgFile)
- tmpCmd | getline tmpRes
- close(tmpCmd)
- if(tmpRes !~/^-/)
- {
- printf "ERROR: \"%s\" is not a ordinary file!\n",CfgFile>"/dev/stderr"
- printf "\t\"%s\" maybe a directory file,Please check it!\n",CfgFile>"/dev/stderr"
- retSts =4
- return retSts
- }
- return retSts
- }
复制代码
----------------------------------------------------------------------------------------------------
[ 本帖最后由 mefit 于 2005-11-3 20:57 编辑 ] |
|