Unix while循环测试命令行参数,如果它是一个目录

时间:2014-04-24 12:07:24

标签: shell unix

尝试创建一个脚本,将命令行参数作为路径名,然后测试它是否是工作目录。然后我希望在目录上运行命令(测试),例如子目录中有多少文件等。

我无法想到用它来测试它的逻辑。您如何确定参数是否是目录?

这就是我试过的

if [ -d "$1" ]
then
    echo "It works"
fi

我没有得到"它有效"当我试试这个。所以我把它切换到-a用于文件,因为它更容易测试。而且,我没有得到回声输出。

2 个答案:

答案 0 :(得分:1)

使用test命令的-d选项。

if [ -d "$1" ]
then ...
fi

答案 1 :(得分:0)

标题提到了一个循环,但以前的评论似乎都没有提到。您可以尝试一个简单的脚本,如:

#!/bin/sh

for arg; do
  if test -d "$arg";
    echo "$arg is a directory"
  else
    echo "$arg is not a directory"
  fi
done

对于多样性,您可以将其重写为:

#!/bin/sh

for arg; do
  not=$(test -d "$arg" || echo "NOT ")
  echo "$arg is ${not}a directory"
done