我的代码是:
#!/bin/sh
cat tmp_ts.log | awk ' {print $8}'
lookup=$8
sqlplus -s "sys/Orcl1234 as sysdba" << EOF
SELECT tablespace_name FROM dba_tablespaces WHERE tablespace_name='$lookup';
exit;
EOF
,我的输出是:
IAM_OIM
no rows selected
在这个变量查找中,我已经传递给select语句,但是它没有工作。
我的最终结果应该是select语句。请参阅下面的select query的输出:
见下文:
我的最终结果应该是这个,但该变量在select语句中不起作用。
答案 0 :(得分:0)
#!/bin/sh
lookup="$(awk '/tablespace/{print $8;exit}' tmp_ts.log)"
echo "Querying database with lookup = $lookup"
sqlplus -s "sys/Orcl1234 as sysdba" <<EOF
SELECT tablespace_name FROM dba_tablespaces WHERE tablespace_name='$lookup';
exit;
EOF
您必须使用awk
的输出来设置lookup
。 shell对$8
中设置的awk
一无所知。此外,我已确保awk
在第一个匹配行之后退出,因此不存在返回多个值的风险,或者只是在您的版本中执行空行。
答案 1 :(得分:0)
您可以使用awk
,sed
或cut
等命令填充查询。
lookup=$(cut -d" " -f8 tmp_ts.log)
您应该添加一些检查,例如@Dario(第一次匹配后退出,只转换tablespace
行,但没有行匹配时该怎么做?)。
如果您未添加支票,则可以跳过设置$lookup
:
sqlplus -s "sys/Orcl1234 as sysdba" << EOF
SELECT tablespace_name FROM dba_tablespaces
WHERE tablespace_name='$(sed 's/.*tablespace- //' tmp_ts.log)';
exit;
EOF