我有一个要求,当我尝试将参数传递给函数时遇到一些问题。以下是我的要求:
我有四种 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 文件的记录级别时。第二个循环中的“资产”没有给我带来确切的身份字符串。即文件中的记录(/SVP3458.CDC.STAT.COM/ORACLE DATABASE PREEST.db),因为删除命令仅适用于每个字符串。
谁能告诉我循环条件中哪里出错了?