2013-07-23 174 views
1

我正在编写一个bash脚本,以便更容易地使用Dropbox文件夹(我为uni存储课程作业)。我决定采用参数让我直接在文件夹中保留特定的几周,或者使用我的所有参考资料的父目录或目录。我还决定使用递归来验证输入(最初我通过将递归语句放在do while循环中创建了一个无限循环)。代码如下:迭代解决方案中的递归解决方案

#!/bin.bash 
#changes to ~/Dropbox/UCP120/ 

function recurCall() { 
    echo "Invalid input: $arg1 does not exist." 
    echo "Enter a valid input" 
    read inputLoop 
    validateInput $inputLoop 
} 

function validateInput() { 
    arg1="$1" 
    reference="r" 

##snip## 

    ##if DIR is !null but non-existent loop and ask for input 
    elif [[ ! -d .../UCP120/"$arg1"/ || ! -d .../UCP120/Week\"$arg1"/ ]]; then  
     recurCall $arg1 
     ##Recursive solutions don't require iterative control structures. 
     #while [[ snip (see if above) ]]; do 
     # recurCall $arg1 
     #done 
    fi 
} 

##Call the function. Get this ball rolling 
validateInput $1 

我的问题是:

  1. 难道我只是幸运这个工作?还是我设法合理设计这个呢?
  2. 递归是现实世界可行的解决方案吗?或在学习练习之外没用?
  3. 有没有真正的世界里的迭代迭代应用程序,就像我想不到的原始尝试?
  4. 我该如何改进?

谢谢,我很抱歉,如果我问了一个不恰当的问题。不过,我希望互联网以其丰富的经验可以帮助我和我理解这些概念。

编辑:删除if语句中的validateInput。交换函数名称,因为它们以这种方式更有意义。在有条件的情况下移除,以期望减轻屏幕宽度。

编辑:缩短的目录路径,以减轻屏幕宽度甚至更多。

回答

0
  1. 只要不输入成千上万的无效输入,就不会耗尽shell的堆栈空间。
  2. 既然它有效,它是可行的。然而,我觉得比一个时间循环更难掌握,而更喜欢后者;但这可能是一个品味问题。
  3. 当然,在迭代中有递归的应用程序,但不是像这里那样,迭代从递归返回后永远不会继续。
  4. 避免递归。 ;-)