0

ユーザーが 1 を入力した場合は table1 からいくつかのエントリを削除し、それ以外の場合は別のエントリを削除する bash 関数を作成しようとしています。私の関数は次のようになります。

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 に答える