要件がありますが、関数に引数を渡そうとするといくつかの問題があります。私の要件は次のとおりです。
テーブル、スキーマ、データベース、およびホストというキーワードを含むファイル名を持つ4つのcsvファイルがあります。次の例の場合:
Rebecca_Delete_Schema_01.csv
Rebecca_Delete_Schema_02.csv
Rebecca_Delete_Host_01.csv
Rebecca_Delete_Database_01.csv
Amable_Delete_Database_02.csv
Raja_Delete_Database_03.csv
Rebecca_Delete_Table_01.csv
Samar_Delete_Table_02.csv
私の要件は、いくつかのアプリケーション固有の削除コマンドを使用して、テーブル、スキーマ、データベース、およびホストの順序でこれらのファイルを削除することです。
ファイルには次の履歴があります。
/SVP3458.CDC.STAT.COM/ORACLE DATABASE PREST.db --Database
/SVP3458.CDC.STAT.COM/ORACLE DATABASE PREST/COMM/EMAIL_DETAIL.tbl-- Table
ホストとアーキテクチャも同様です。
削除コマンドは、これらの識別文字列で直接機能します。以下は私のスクリプトです。
process_deletecm()
{
ISCRED_PATH=/opt/IBM/InformationServer/Clients/iscreds/cli
cd $ISCRED_PATH;
sed -ie 's/ /\*/g ' $1
echo $1
for file in $(cat $1 )
do
for Asset in $(cat $file)
do
./iscred.sh deletecm -dom profiling:8006 -authfile file.auth -cm ''$Asset'' -f
done
done
}
DB_PATH=/opts/reports/AB/Table_Delete
for csvfile in $DB_PATH/*.[Cc][Ss][Vv]; do
filename="$(basename "$csvfile")"
if [[ "${filename,,}" = *table* ]]; then
echo $filename >> $DB_PATH/Tab_Delete_File.csv
elif [[ "${filename,,}" = *schema* ]]; then
echo $filename >> $DB_PATH/Sch_Delete_File.csv
elif [[ "${filename,,}" = *database* ]]; then
echo $filename >> $DB_PATH/DB_Delete_File.csv
elif [[ "${filename,,}" = *host* ]]; then
echo $filename >> $DB_PATH/Hst_Delete_File.csv
fi
done
process_deletecm $DB_PATH/Tab_Delete_File.csv
process_deletecm $DB_PATH/DB_Delete_File.csv
これらの機能を使用してその実行順序を強制しようとしています。
問題は、各csvファイルのレコードレベルで繰り返すときです。 2番目のループの「資産」は正確なID文字列を取得しません。つまり、削除コマンドは各文字列でのみ機能するため、ファイル(/SVP3458.CDC.STAT.COM/ORACLE DATABASE PREEST.db)のレコードです。
ループ条件で私がどこで間違っているのか教えてくれる人はいますか?