Shell脚本:[参数太多了

问题描述 投票:-2回答:2

有人可以解释为什么我的if声明无效吗?

if [ [ $# -ge 2 ] && [ [ grep -o "$2" $1 | wc -l ] -gt 0  ] ]
bash shell unix
2个回答
0
投票

更换:

[ [ $# -ge 2 ] && [ [ grep -o "$2" $1 | wc -l ] -gt 0  ] ]

附:

[ $# -ge 2 ] && grep -q "$2" "$1"

在此命令中:

  • [ $# -ge 2 ]测试是否提供了2个或更多参数
  • &&是合乎逻辑的
  • 如果模式grep -q "$2" "$1"出现在文件$2中,$1返回true。选项-q告诉grep安静,只需设置退出代码,这是if命令将要查找的内容。

Example:

考虑一个包含此文件的目录:

$ cat input.txt
a pattern here

让我们像在shell脚本中那样设置参数:

$ set -- input.txt pattern

现在,让我们运行我们的命令:

$ if [ $# -ge 2 ] && grep -oq "$2" $1; then echo yes; fi
yes

0
投票

正如其他人已经指出你的括号错了,但我会把这些代码写成单独的测试,所以你可以提供有意义的错误信息,例如:

(( $# >= 2 ))     || { printf '$# is too small\n' >&2; exit 1; }
grep -q "$2" "$1" || { printf 'grep found nothing\n' >&2; exit 1; }

或者你想表达的任何东西。无论你做什么 - 保持简单......

© www.soinside.com 2019 - 2024. All rights reserved.