在下面的shell脚本中,我连接到db并获取count值。
在下面的代码中,我没有得到正确的计数值。相反,它返回185(随机int值)
但实际应该返回的计数值是2233。
如果我用return
替换echo
,它将打印正确的2233值。但是alertCount
变量被赋值为0。
findAlertCount(){
(
count=$(sqlplus -s ${DBA_ORACLE_USER}/${DBA_ORACLE_PWORD}@${ORACLE_SID} <<END
#connect ${DBA_ORACLE_USER}/${DBA_ORACLE_PWORD}@${ORACLE_SID}
set serveroutput on
set linesize 1000
set heading off
set feedback off
SELECT count(1)
FROM mytable
WHERE mycolumn IS NOT NULL;
exit;
END
)
return "$count"
)
}
findAlertCount
alertCount=$?
echo "alertCount" $alertCount
//如果使用return,则打印185。如果使用echo,则打印0。
最佳答案
使用printf
并在stdout函数中检索“count”的最终值。
#!/bin/sh
findAlertCount()
{
count=2233
printf "$count"
}
alertCount=$(findAlertCount)
printf "alertCount $alertCount\n"
另外,我观察到您使用括号
()
将函数体作为子shell调用。如果目的仅仅是将命令描述为集合或列表,那么可以尝试括号{}
,这样程序的其余部分就可以访问count的值。