0

我正在尝试编写一个bash函数,如果用户输入1,它应该从table1中删除一些条目,否则删除不同的条目。我的功能如下所示:

function reset_db
{
        if [ $usr_input == 1 ]  
        then
        sqlplus -s $USR/$pwd@$SID << EOF

        delete from table1 where component = 'ABC';
        delete from table2 where component = 'ABC';
        exit
EOF
        else if [ $usr_input == 2 ]

        delete from table1 where component = 'XYZ';
        delete from table2 where component = 'XYZ';
        exit
EOF
fi
}

我收到错误:意外标记“fi”附近的语法错误

我确信它正在发生,因为我在某处错误地使用了 if-else 但无法找到解决它的方法。

如果我还有更多后续问题,请告诉我如何在同一线程下发布代码。

4

2 回答 2

2

你的“else if”是错误的,正确的语法是“elif”。

于 2013-02-25T19:48:01.287 回答
1

您需要在if语句的每个子句中重复该命令:

function reset_db
{
        if [ $usr_input == 1 ]  
        then
        sqlplus -s $USR/$pwd@$SID << EOF

        delete from table1 where component = 'ABC';
        delete from table2 where component = 'ABC';
        exit
EOF
        elif [ $usr_input == 2 ]; then

        sqlplus -s $USR/$pwd@$SID << EOF
        delete from table1 where component = 'XYZ';
        delete from table2 where component = 'XYZ';
        exit
EOF
fi
}

作为简化,你应该重构这个:

reset_db () {
    if [[ $usr_input = 1 ]]; then
      to_delete='ABC'
    elif [[ $usr_input = 2 ]]; then
      to_delete='XYZ'
    else
      return
    fi
    sqlplus -s "$USR/$pwd@$SID" <<EOF
    delete from table1 where component = '$to_delete'
    delete from table2 where component = '$to_delete'  
    exit
EOF
    fi
}
于 2013-02-25T19:58:58.037 回答