下面的脚本帮助我通过 ssh 并执行 sqlplus 从数据库中获取信息。我检查过,它运行良好,但唯一的问题是,如果我在 sql 查询中使用单引号,那么我会收到错误,因为我已经在 ssh 中使用了单引号。
db_info=`${ssh_path} -qn ${ssh_host} '
DBHost="<TNS>";
$ORACLE_HOME/bin/sqlplus -s $DBUser/$DBPass@$DBHost <<EOF
set heading off feedback off verify off
Select count(*) from table_name where column = 'hell123';
quit;
EOF
'`
echo $db_info
答案1
您可以'
通过编写'\''
(解释)。
但使用此处文档让 shell 片段在远程主机上运行会更容易。
db_info=$("${ssh_path}" -qn "${ssh_host}" <<\END_SSH
DBHost="<TNS>";
$ORACLE_HOME/bin/sqlplus -s $DBUser/$DBPass@$DBHost <<\END_SQL
set heading off feedback off verify off
Select count(*) from table_name where column = 'hell123';
quit;
END_SQL
END_SSH
)
echo "$db_info"
答案2
谢谢斯里格。我在我的剧本中使用了你的想法,效果非常好。只需'\''
在单引号的位置添加即可。
db_info=`${ssh_path} -qn ${ssh_host} '
DBHost="<TNS>";
$ORACLE_HOME/bin/sqlplus -s $DBUser/$DBPass@$DBHost <<EOF
set heading off feedback off verify off
Select count(*) from table_name where column = '\''hell123'\'';
quit;
EOF
'`
echo $db_info