当前位置:  开发笔记 > 编程语言 > 正文

for循环查找unix中是否存在目录

如何解决《for循环查找unix中是否存在目录》经验,为你挑选了1个好方法。

我想使用一个脚本来检查是否存在目录列表,同时它应该打印一些我发送的自定义消息.

例如:

我有一个脚本验证目录是否存在:

**check.sh**

for i in $*
   if [ -d "$i" ]; then
      echo Found  directory.
   else
       echo  directory not found.

现在我想这样调用这个脚本:

./check.sh $DIR1 msg1 $Dir2 msg2 $Dir3 msg3

因此,如果DIR1不存在,那么我想将消息显示为"找不到msg1目录",类似于DIR2,我想显示"未找到msg2目录".这里msg1和msg2是我想要作为字符串传递的东西.怎么做到这一点?我正在使用bash shell.



1> Zac..:

试试这个:

while [ -n "$1" ]
do
    dir="$1"
    msg="$2"
    if [ -d "$dir" ]; then
        echo "$msg dir FOUND"
    else
        echo "$msg dir NOT FOUND"
    fi
    shift 2
done

shift 命令只是将左侧位置参数传递给n个位置的脚本.例如,如果您使用以下命令调用脚本:

./myscript 1 2 3 4

$1是"1"并且$2是"2"

但如果你shift 2那么$1是"3"并且$2是"4".

这样,循环每个循环消耗2个参数,直到$1参数为空字符串(-n "$1").

while 条件可以更优雅地写成:

while (( $# ))

获得相同的结果.

您还可以检查第二个参数(while [ -n "$2" ]),但这会在用户提供奇数个参数时更改行为:

在第一种情况下,将检查最后一个目录,但是你会收到一条奇怪的消息,因为它是$msg空的

在第二种情况下,你不会有奇怪的消息,但最后的目录将默默无法检查

一开始就有更好的测试参数:

if (( $# % 2 ))
then
    echo "Provide an even number of parameters"
    exit 1
fi


`while`条件可以简单地是`(($#))`(测试位置参数的数量是否为非零).
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有