【问题标题】:BASH args with DIR1 DIR2 DIR3BASH args 与 DIR1 DIR2 DIR3
【发布时间】:2013-12-06 22:47:28
【问题描述】:

我正在尝试检查我们从 args 获得的文件夹(目录)是否存在。 示例:

./file.sh Dir1 Dir2 Dir3 etc..

所以我必须检查目录(Dir1 $1)是否存在,然后做一些事情,然后我应该跳到下一个参数(我们得到的目录,$2)并做同样的事情......等等。

我知道这样做:

检查文件夹是否存在

if [ -d $* ];
then
echo "The specified folders exists"
for item in $LOCATION/*
do
.....
done


else

echo "The specified folders does NOT exists, Iam EXITING"

exit 0

fi

但是像这样我一次检查所有文件夹,如果其中一个不存在,他将退出。所以我希望他一个接一个地检查1,当他得到一个不退出的时候,他应该停下来。

【问题讨论】:

  • 请展示您已经尝试过的内容。
  • 上面的代码我正在尝试修复它..但我不知道如何检查参数...我正在做很多事情,例如我正在搜索大小和类型等,但这个事情会进来做..但问题是开始我怎么能让他通过args检查args(一个接一个)
  • 缺少几个部分......例如迭代参数(使用"$@"而不是$*)。此外, test -d 不采用向量($* 是),而是采用单个参数(您还需要引用)。
  • 它的工作方式是这样的

标签: bash if-statement for-loop while-loop


【解决方案1】:
for DIR in "$@" ; do
  if [ ! -d "$DIR" ] ; then
    echo "$DIR does not exist.  I am EXITING"
    exit 1
  fi
  echo "$DIR exists, continuing on."
  ... add whatever code you want to do on $DIR here ...
done

【讨论】:

  • 但是当他找到存在的 Dir 时,他应该停下来并发出几个命令,这样他会回显吗?另一个问题为什么退出 1 ?而不是退出 0 ?
  • 嗯,很明显,你可以做任何你想做的事情来代替'echo',这只是为了简单起见。作为惯例,我们使用“exit 1”而不是“exit 0”。退出 0 表示命令成功完成,在这种情况下,它没有。
  • 这个问题似乎也很不明确……
  • 扩展“退出#”业务。您在退出后提供的任何数字都会在 shell 中设置为“退出状态”。通常,退出状态为 0 意味着一切都按照预期的方式工作。其他任何事情,都意味着它没有按照预期的方式工作。您可以使用 0 到 255 之间的任何数字作为退出状态。
【解决方案2】:

您只需要使用$@ 单独遍历每个目录,而不是使用$* 一次检查所有目录:

for dir in "$@"; do
  if [[ -d "$dir" ]]; then
    # and so on

【讨论】:

  • 在我尝试之前还有一件事,Dir 的名字不一样,他可以写任何东西。那我该怎么做呢?或者它会像那样工作?
猜你喜欢
  • 2017-02-20
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多