Shell脚本:[参数过多

时间:2019-03-03 19:24:49

标签: bash shell unix

有人可以解释为什么我的if语句不起作用吗?

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

2 个答案:

答案 0 :(得分: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命令要查找的内容。

示例:

使用此文件考虑目录:

$ cat input.txt
a pattern here

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

$ set -- input.txt pattern

现在,让我们运行命令:

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

答案 1 :(得分:0)

正如其他人指出的那样,您使用了错误的括号,但是无论如何我还是将代码编写为单独的测试,以便您可以提供有意义的错误消息,例如:

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

或您要表达的内容。无论您在做什么-保持简单...