Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell Unix while循环测试命令行参数(如果是目录)_Shell_Unix - Fatal编程技术网

Shell Unix while循环测试命令行参数(如果是目录)

Shell Unix while循环测试命令行参数(如果是目录),shell,unix,Shell,Unix,尝试创建一个脚本,该脚本将命令行参数作为路径名,然后测试它是否是工作目录。然后我希望在目录上运行命令(测试),比如在哪个子目录中有多少个文件等等 我想不出一个逻辑来检验这一点。如何确定参数是否为目录 这就是我尝试过的 if [ -d "$1" ] then echo "It works" fi 当我尝试这个的时候,我不明白“它是有效的”。所以我把它改为-a作为文件,因为它更容易测试。同样,我没有得到回声输出。使用命令的-d选项 标题提到了一个while循环,但之前的评论似乎都没有提到。

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

我想不出一个逻辑来检验这一点。如何确定参数是否为目录

这就是我尝试过的

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

当我尝试这个的时候,我不明白“它是有效的”。所以我把它改为-a作为文件,因为它更容易测试。同样,我没有得到回声输出。

使用命令的
-d
选项


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

#!/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

$pathname是否引用运行脚本时传递的参数?用户应该能够只键入script1/home/apple,然后它将进行检查?您可以执行
pathname=$1
来获取参数。我以为你的问题是关于如何测试一个目录,并且假设你知道如何访问参数。我想如果[-d“$1”],我就可以这样做,因为路径名没有空格?即使路径名有空格,你也可以这样做,引号可以解决这个问题。好的,我已经使用-a测试了这个问题,并尝试使用一个文件。但是对于要运行的命令,我只有一个简单的回音“Itworks”。它没有执行echo语句,这意味着它没有说文件存在,但文件确实存在。“测试它是否是工作目录”是什么意思?测试它是否是当前进程的工作目录?测试它是否是来自某个版本控制系统的签出?测试它是否是用户有权访问的目录?当您将目录传递给代码时,代码会正常工作。你到底是怎么测试的?
#!/bin/sh

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