【问题标题】:nested while loops (bash scripting in linux)嵌套的while循环(linux中的bash脚本)
【发布时间】:2014-12-19 22:27:32
【问题描述】:

我的嵌套 while 循环有问题。我的问题是我的内部 while 循环只执行一次,但我的外部循环能够继续重复。这是我的代码:

while [[ "$input" != "exit" && "$input" != "Exit" && "$input" != "EXIT" ]]
do

  echo 'Enter "name" to find files by name'

  read input


  if [[ "$input" = "name" || "$input" = "Name" || "$input" = "NAME" ]]; then


     while [[ "$a" != "f" && "$a" != "s" ]]
     do
        read -p "Want to search inside only the current folder (f) or include subfolders (s)" a
        if [ "$a" = "f" ]; then
           echo 'f'

        elif [ "$a" = "s" ]; then
           echo 's' 

        elif [[ "$a" != "f" && "$a" != "s" ]]; then
           echo 'you have entered an invalid option, please try again'

        fi
     done
  fi
done

这是一个示例输出:

输入“名称”以按名称查找文件

输入“大小”查找指定大小的文件

输入“日期”按日期查找文件

输入“字符串”以查找包含特定字符串的文件

输入“exit”退出脚本。

名字

只想在当前文件夹内搜索 (f) 或包含子文件夹 (s)t

您输入的选项无效,请重试

只想在当前文件夹内搜索 (f) 或包含子文件夹 (s)s

s

输入“名称”以按名称查找文件

输入“大小”查找指定大小的文件

输入“日期”按日期查找文件

输入“字符串”以查找包含特定字符串的文件

输入“exit”退出脚本。

name # 这里是我的内部循环运行失败的地方,但我不明白为什么

输入“名称”以按名称查找文件

输入“大小”查找指定大小的文件

输入“日期”按日期查找文件

输入“字符串”以查找包含特定字符串的文件

输入“exit”退出脚本。

【问题讨论】:

    标签: linux bash unix while-loop


    【解决方案1】:

    您的代码似乎与您提供的打印输出不匹配。也不清楚你的问题是什么。但是代码有一个明显的问题,它在读取之前比较了input 的值。您需要读取输入,然后将其与某些内容进行比较。幸运的是,这并不难做到,因为while 条件中可以有多个命令。另一个问题似乎是你永远不会跳出内部循环。

    以下内容也被重构为使用更优雅的case 语句,而不是重复比较。

    while read -p 'Enter "name" to find files by name' input
          [[ ! $input =~ [Ee]xit|EXIT ]]
    do
         case $input in
           [Nn]ame | NAME )
             while read -p "Want to search inside only the current folder (f) or include subfolders (s)" a
                 case $a in
                   f)
                     echo 'f'
                     break ;;   # success: break out of while loop
                   s)
                     echo 's'
                     break ;;
                   *)
                     echo 'you have entered an invalid option, please try again' ;;
                 esac
             done ;;
         esac
     done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-13
      • 2019-05-06
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多