0
#!/bin/bash

echo input directory 1
read dir1
dir1a="$dir1"
echo input directory 2
read dir2
dir2a="$dir2"

pathIs="/$dir1/$dir2"
cd $pathIs

echo $pathIs

echo input file name
read file

find . -iname "$file" -print

只要我知道要搜索多少个目录和子目录(上例中为 2 个),上面的脚本就可以正常工作。

我的问题:
1. 我想修改它以适用于任意数量的子目录(例如 3 或 4)?
2. 即使我使用for循环进入多个目录,我也得到了如何告诉pathIs变量的问题,我进入了多少个目录?

#!/bin/bash
echo directory name
read num

for i in $num

do
echo input directory 1
read dir
done

pathIs="/$dir1/$dir2"
cd $pathIs


echo input file name
read file

find . -iname "$file" -print
4

2 回答 2

1

有两种选择。

  1. 提前询问用户将提供多少条目,然后阅读多次
  2. 让用户终止他们的条目,也许通过给出一个空条目

要执行第二个选项,您可以使用大多数编程语言中的通用模式 - “预读,读同时”循环。

   read x
   while [ $x ]; do
      echo "Do something with $x"
      read x
   done
   echo "DONE"

所以我们读了 x 一次。然后我们进入一个while循环,它检查变量,对它做一些事情,然后再次读入它,并继续循环,直到遇到终止条件。

在上面的示例中,如果[ $x ]计算结果为 false(空字符串),则循环退出。而不是echo "Do something with $x",您需要将字符串附加到pathIs变量中。

另一件事——最有用的 shell 脚本不会从标准输入读取这种类型的输入。最终,您将希望处理在命令行中给出的参数。

于 2013-05-01T11:09:13.990 回答
0

您还可以从命令行读取输入参数,如下所示:

for i in {1..$#}
do
   variable[i]=$1
   shift
done

循环遍历所有命令行参数,将它们读入“变量”数组

于 2013-05-01T16:19:55.553 回答