【发布时间】:2017-04-13 17:06:06
【问题描述】:
我有pdb_lists.log如下:
cat pdb_lists.log
'PDB1','PDB2'
我需要检查上面列表中每个 PDB 的 TDE 状态并分配给新变量
for i in $( cat $SQL_SPOOL_LOG_DIR/pdb_lists.log | sed "s/,/ /g" | sed "s/'/ /g")
do
PDB_TE_STATUS=$ORACLE_HOME/bin/sqlplus '/as sysdba' << EOF
whenever sqlerror exit failure
connect / as sysdba
set head off
set pagesize 0
set linesize 145
set feedback off
alter session set container=$i;
show con_name;
spool $SQL_SPOOL_LOG_DIR/pdb_te_enable_status.log
select status from v\encryption_wallet;
spool off
EOF
CDB_CREATOR_PDB=$ORACLE_HOME/bin/sqlplus '/as sysdba' << EOF
whenever sqlerror exit failure
connect / as sysdba
set head off
set pagesize 0
set linesize 145
set feedback off
alter session set container=$i;
show con_name;
spool $SQL_SPOOL_LOG_DIR/pdb_cdb_creator_pdb_status.log
select distinct CREATOR_PDBNAME from v\$encryption_keys where CREATOR_PDBNAME not like 'CDB$ROOT%' and KEY_ID is not null;
spool off
EOF
done
一旦我为每个 PDB 分配了一个新变量,我就需要根据相应 sql 的值运行。
【问题讨论】:
-
...另外,顺便说一句——Don't Read Lines With
for。有关使用文件 I/O 的最佳实践的讨论,请参阅 BashFAQ #1。还可以考虑通过shellcheck.net 运行您的代码并修复发现的引用错误。
标签: bash loops variables for-loop