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