Bashスクリプトで複数のパッケージ仕様をどのようにコンパイルできますか?

Bashスクリプトで複数のパッケージ仕様をどのようにコンパイルできますか?

以下は私のコードです。パッケージ仕様をコンパイルし(.pksファイルとして保存)、エラーがある場合はスクリプトでエラーが発生するはずです。ただし、このコードは正しく機能しません。私はこれをどうすることができますか?

spec=`ls *.pks -1|sed -e ''s/\.pks$//''`;
if [ ! -z "$spec" ] ; then
for i in $spec; do
compile_spec()
{
sqlplus -s @user << EOF
WHENEVER SQLERROR EXIT SQL.SQLCODE;
SET LINES 255
SET PAGES 0
SET FEEDBACK OFF
SET ECHO OFF
SET PAGESIZE 0
SET TIMING OFF
SET SERVEROUTPUT ON
SET TERM ON
ALTER PACKAGE $i COMPILE PACKAGE;
EOF
}
done
PKS=`compile_spec`;
echo `$PKS`
if [ $? -ne 0 ]; then
  echo "error"
  exit 1
fi
fi

ベストアンサー1

これは働きます:

for i in *.pks;do
        i=${i%.pks}
        sqlplus -s @user << EOF
                WHENEVER SQLERROR EXIT SQL.SQLCODE;
                SET LINES 255
                SET PAGES 0
                SET FEEDBACK OFF
                SET ECHO OFF
                SET PAGESIZE 0
                SET TIMING OFF
                SET SERVEROUTPUT ON
                SET TERM ON
                ALTER PACKAGE $i COMPILE PACKAGE;
        EOF
        if [ $? -ne 0 ]; then
                echo "error"
                exit 1
        fi
done

sqlplusコマンドを関数の外に移動して後に置いたので、ゼロ以外の値if [ $? -ne 0 ]を返した場合は終了する必要があります。sqlplus公開したスクリプトは、を返すif [ $? -ne 0 ]コマンドの後に続きます。echo0

構文解析のため、lsコマンドのコマンドも変更しました。findls

ilkkachuのコメントに基づいて編集されました。

おすすめ記事