Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Shell脚本:[参数太多_Bash_Shell_Unix - Fatal编程技术网

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”
在此命令中:

  • [$#-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;然后回显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

[
]