免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: guangzongy
打印 上一主题 下一主题

函数递归 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-10-12 09:44 |只看该作者

函数递归

想了解一下shell中的函数递归,所以写了一个试验的代码:

  1.      1  #! /bin/sh

  2.      2  # check parameter's count

  3.      3  if [ ! $# -eq "2" ]
  4.      4  then
  5.      5  echo "usage: ${0} -v modelName"
  6.      6  exit 1
  7.      7  fi
  8.      8  #
  9.      9  IPNETVERSIONDATAPATH="../../lib"
  10.     10  #
  11.     11  # function define --- list directery in target path
  12.     12  #
  13.     13  function listPathContentDirs ()
  14.     14  {
  15.     15  #echo "listPathContentDirs:"$1
  16.       
  17.     16  #
  18.     17  findPath=$1
  19.     18  pathContent=(`ls -l "${findPath}" | awk ' $1 ~ /^d/ {print $9}'`)
  20.     19  echo ${pathContent[@]}
  21.     20  #
  22.     21  }
  23.     22  #
  24.     23  # flag for find target dir
  25.     24  flag1=0
  26.     25  export flag1
  27.     26  # target dir which contain target object
  28.     27  returndir=null
  29.     28  export returndir
  30.     29  #
  31.     30  # function define --- check target path contain target directery
  32.     31  #
  33.     32  function checkPathContainDir ()
  34.     33  {
  35.       
  36.     34  echo "flag1:${flag1}   returndir:${returndir}"
  37.     35  echo "checkPathContainDir:$1   $2"
  38.       
  39.     36  # find target object in this path
  40.     37  local targetPath=$1
  41.     38  # target object
  42.     39  local modelname=$2
  43.     40  #
  44.     41  # call function "listPathContentDirs" to get all dir in this path
  45.     42  local dirLists=`listPathContentDirs ${targetPath}`
  46.     43  #
  47.     44  # assert target object in listed dirs
  48.     45  #
  49.       
  50.     46  echo "lists:${dirLists[@]}"
  51.       
  52.     47  #exit 1
  53.       
  54.     48  for var in ${dirLists[@]}
  55.     49  do
  56.       
  57.     50  echo "check:"$var
  58.       
  59.     51  #
  60.     52  # has found the target object
  61.     53  #
  62.     54  if [ ${flag1} -eq "1" ]
  63.     55  then
  64.     56  #exit 0
  65.     57  #break
  66.     58  return
  67.     59  fi
  68.     60  #
  69.     61  # search target object in current path
  70.     62  #
  71.     63  if [ ${var} = ${modelname} ]
  72.     64  then
  73.     65  echo "NOTE"
  74.     66  returndir="${targetPath}/${var}"
  75.     67  flag1=1
  76.     68  export flag1 returndir
  77.     69  #exit 0
  78.     70  #break
  79.     71  return
  80.     72  else
  81.     73  #
  82.     74  # search target object in sub-directory
  83.     75  #
  84.       
  85.     76  echo "targetPath:${targetPath}  var:${var}"
  86.     77  checkPathContainDir "${targetPath}/${var}" "${modelname}"
  87.     78  fi
  88.     79  done
  89.     80  #return
  90.     81  }
  91.       

  92.     82  checkPathContainDir "${IPNETVERSIONDATAPATH}" "${2}"
  93.     83  echo ${flag1}
  94.     84  echo ${returndir}
复制代码

许多输出是为了跟踪代码运行过程的:),大家给点意见。

论坛徽章:
0
12 [报告]
发表于 2012-06-14 14:49 |只看该作者
谢谢各位前面的解释,加了local后,递归函数可以正常执行了。特此来感谢。

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
13 [报告]
发表于 2012-06-14 15:49 |只看该作者
挖坟
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP