2

我正在 BASH 中进行验证

if [ !( ( -e $f ) || ($# -lt 2) || ( -d $f ) ) ]; then
    exit 0
fi

我正在尝试查看该文件是否存在,或者它是否是一个目录,或者是否通过终端传递了足够的参数。我可以这样做还是必须以其他方式完成?

4

2 回答 2

1

看起来你在这里至少有一些问题。

  • 您的测试语法将需要更现代的双[[命令而不是传统的单[命令。

  • fi最后错过了一个。(我为你编辑了这个,感谢修改它的人。)

  • 可能会觉得你的测试颠倒了,但我不确定。这取决于脚本的其余部分是什么样的。

于 2013-03-26T18:44:40.060 回答
1

我从你的问题中收集到你想拒绝任何不是普通文件的东西。在这种情况下,如果使用 -f 而不是 -e,则对目录的测试是多余的。

if [[  ! -f "$f" || $# -lt 2 ]]; then
    exit 0
fi

顺便说一句,如果这是一个错误退出,你应该退出 0 以外的东西 - 0 在大多数情况下表示成功;出口1会更好。

于 2013-03-26T19:22:58.653 回答