我使用shellscript递归调用了一个函数,但是递归调用函数时函数不接受参数,无限循环运行

7uzetpgm  于 2023-02-05  发布在  Shell
关注(0)|答案(1)|浏览(134)

我试图打印一个特定文件的子文件和子目录。情况是,我将直接给出根文件夹的位置。首先它应该打印根文件夹的文件和目录,在文件的情况下,它应该只打印文件的名称并返回。在文件夹的情况下,它应该打印文件夹名并遍历该子文件夹并打印其中存在的文件和文件夹。因此情况是,如果是文件,则打印文件名,如果存在文件夹,则保留else,递归遍历文件夹并打印其中的内容,如果在该文件夹中找到子文件夹,我再次递归遍历它,直到你发现没有文件夹存在。我需要在 shell 脚本语言执行
我已经用java写了这个函数的示例代码,这是代码逻辑,我正在用shell脚本尝试相同的逻辑,但是每当我递归调用这个函数时,它就会在shell脚本中运行无限循环
Java代码:

import java.io.File;
 import java.nio.file.Files;
 public class Recursion 
 {
   public static void fileRecursive(File root)
   {
     System.out.println(root.getName());
     if(root.isFile()) 
     {
      return;
     }
     else
     {
      File[] files = root.listFiles();
      for(File file : files)
      {
       fileRecursive(file);
      }
     }
   }
 public static void main(String args[])
 {
  File directoryPath = new File("/home/keshav/Main");
  System.out.println("Root Folder : "+directoryPath.getName());
  fileRecursive(directoryPath);
}

}

Shell-Script Code:

 FileTraverse()
 {
   path=$dirname
   if [ -f "$path" ];  
    then 
       return;
   else 
   for dir in `ls $dirname`;
    do
    FileTraverse $dir
    done
   fi         
  }

 echo "Enter Root directory name"
 read dirname
 FileTraverse $dirname
yqlxgs2m

yqlxgs2m1#

分析您的程序,我们可以看到:
1.只给变量dirname赋值一次(在read语句中的函数之外),但从不给它赋值。每次调用函数(包括记录式调用)都为此变量使用相同的值。
1.你通过传递一个参数来调用你的函数,但是你从来没有真正使用这个参数。
解决方案:在函数内部执行

path=$1

作为第一条语句,在函数体中,将每次出现的dirname替换为path

相关问题