【问题标题】:Assign new bash variable for each iteration in a for loop [duplicate]为for循环中的每次迭代分配新的bash变量[重复]
【发布时间】: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 的值运行。

【问题讨论】:

标签: bash loops variables for-loop


【解决方案1】:

使用关联数组。关联数组(也称为映射或字典)的行为类似于数组,但允许任意字符串作为索引。

declare -A status
for pdb in ...; do
   status["$pdb"]=...
done

要读取 PDB 的状态(无论是什么),请使用 ${status[nameOfThePDB]}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2017-02-09
    • 2018-05-23
    • 1970-01-01
    • 2012-12-02
    • 2016-03-15
    相关资源
    最近更新 更多