Bash-意外标记'fi';

Bash-意外标记'fi';,bash,if-statement,parameters,parameter-passing,argument-passing,Bash,If Statement,Parameters,Parameter Passing,Argument Passing,运行此脚本时,出现以下错误: #!/usr/bin/env bash if [[ $# -eq '0' ]] then var=command if [[ ${var} -eq '0' ]] then do something else do something else fi fi if [[ $# -eq '1' ]] usage; fi if [[ $# -eq '2' ]] if [[ "$1

运行此脚本时,出现以下错误:

#!/usr/bin/env bash

if [[ $# -eq '0' ]]
then
    var=command

    if [[ ${var} -eq '0' ]]
    then
        do something
    else
        do something else
    fi
fi

if [[ $# -eq '1' ]]
    usage;
fi

if [[ $# -eq '2' ]]
    if [[ "$1" != "-r" ]]
    then
        usage;
    fi
    if [[ "$2" =~ some_pattern ]]
    then
        do something
    else
        echo "Pattern is in an improper format. Please enter it as: correct_pattern, and try again"
        exit 1
    fi
    usage="Usage: meta_script.sh -r correct_pattern
    -r for reset is used to manually pass a parameter instead of using the default"
exit 1
fi

在我检查参数数量是否等于1的第一个
if
语句中,我输入了一个
then
,但是我得到了与上面相同的错误,除了
then
而不是
fi
。几乎就好像无论我把什么放在哪里,我都会得到这些错误,当我删除它们试图修复它时,我会得到另一堆类似的错误。请帮我更正这个脚本。谢谢

关于该部分:

./meta_script.sh: line 31: syntax error near unexpected token `fi'
./meta_script.sh: line 31: `fi'
第一个
if
语句缺少
then
。把它放进去会让你克服这个错误:

if [[ $# -eq '2' ]]
    if [[ "$1" != "-r" ]]
    then
你会发现我把
then
放在同一行,因为这是一个很好的习惯,意识到
如果
那么
总是在一起(与
相同,而
)。它还允许您在任何给定的终端上看到更多行“有用”代码:-)


我还去掉了
2
周围的无用引号,因为
$#
总是返回一个数值。我建议只对字符串使用引号。

你错过了一个
然后
如果[$\eq'1']
如果[$\eq'2']
。试试吧,谢谢!我会试试看,然后告诉你。如果这行得通,请回答,我会接受的。再次感谢@埃坦雷斯纳:成功了!我现在又犯了一个错误,但本质上,它是不一样的,它起作用了。谢谢你能帮我纠正这个错误吗?当我给它错误数量的参数时就会发生这种情况。它不去使用,而是退出。可能会发生什么?我将在这里修改代码以反映“工作”代码,希望您能帮助我。谢谢@埃坦雷斯纳:没关系。我成功了!再次感谢您的帮助:)
if [[ $# -eq 2 ]] ; then
    if [[ "$1" != "-r" ]] ; then