Bash Shell脚本:[参数太多
有人能解释一下为什么我的Bash Shell脚本:[参数太多,bash,shell,unix,Bash,Shell,Unix,有人能解释一下为什么我的if语句不起作用吗 if [ [ $# -ge 2 ] && [ [ grep -o "$2" $1 | wc -l ] -gt 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告诉
if
语句不起作用吗
if [ [ $# -ge 2 ] && [ [ grep -o "$2" $1 | wc -l ] -gt 0 ] ]
替换:
[$#ge 2]&&[[grep-o“$2”$1 | wc-l]-gt 0]]
与:
[$#-ge 2]&&grep-q“$2”“$1”
在此命令中:
测试是否提供了2个或更多参数[$#-ge 2]
是逻辑和&&
如果模式grep-q“$2”“$1”
出现在文件$2
中,则返回true。选项$1
告诉-q
保持安静,只需设置退出代码,退出代码就是grep
命令要查找的代码if
$ cat input.txt
a pattern here
让我们将参数设置为shell脚本中的参数:
$ set -- input.txt pattern
现在,让我们运行命令:
$if[$#-ge 2]&&grep-oq“$2”$1;然后回显yes;fi
对
正如其他人指出的那样,您的括号有误,但无论如何,我都会将该代码作为单独的测试来编写,这样您就可以提供有意义的错误消息,例如:
(( $# >= 2 )) || { printf '$# is too small\n' >&2; exit 1; }
grep -q "$2" "$1" || { printf 'grep found nothing\n' >&2; exit 1; }
或是你想表达的内容。不管你做什么-保持简单……/P>你的脚本的输入参数是什么?考虑运行它来自动检测常见问题。你所张贴的不是一个完整的语句。这是你的整个脚本吗?我实际上正在通过“SH MyFiel.S.Iput.txt模式”。,因此,在上面提到的if条件中,首先将检查参数的数量是否大于2,以及输入中是否存在模式。txt为什么在其中有random
[
和]
?