按变量执行脚本变量

时间:2012-11-01 13:10:05

标签: shell unix scripting scripting-language

我有一个脚本&它如下所示,

instant_client="/root/ora_client/instantclient_11_2"

output=`$instant_client/sqlplus -s HRUSER/HRUSER@TOMLWF <<EOF
set heading off
set feedback off
set lines 10000
set pagesize 10000
select count (1) from onboardingcandidates o, candidatedetails c where o.candidateid=c.candidateid and o.JOININGSTATUS='0091' and to_date(o.joiningdate)=to_date(sysdate+5);
EOF
exit
`

query=(`$instant_client/sqlplus -s HRUSER/HRUSER@TOMLWF <<EOF
set heading off
set feedback off
set lines 10000
set pagesize 10000
select o.candidateid from onboardingcandidates o, candidatedetails c where o.candidateid=c.candidateid and o.JOININGSTATUS='0091' and to_date(o.joiningdate)=to_date(sysdate+5);
EOF`)
i=0
echo "Throwing individual arrays:"
while [ $i -lt $output ]
do
    a=${query[$i]}
    echo Candidate[$i]=$a
    i=$(($i+1))
done

输出:

Throwing individual arrays:
Candidate[0]=cand1
Candidate[1]=cand2
Candidate[2]=cand3
Candidate[3]=cand62

需要的输出

一切都很好。

我需要的是,我一次需要1个输出。

即。如果我运行上面的脚本,那么应该控制输出。

它应该在提示符上一次抛出1个输出。

这可能吗?

如果您需要更多PLZ请求。我希望我能用我的双打清楚

2 个答案:

答案 0 :(得分:1)

所以你正在运行两个查询,一个用于获取结果数量,第二个用于获得结果。

如果您只想拥有一个查询,则可以迭代计算结果数。由于变量query是一个数组,您可以使用:

${#query[*]}

作为结果行数,然后使用:

while [ $i -lt ${#query[*]} ]

作为循环条件。

如果您想一次显示一个结果,并且需要在它们之间输入,那么您可以在回显之后添加read

如果要显示特定的返回行,则假设该例程按原样调用,则要显示的行号作为第一个参数$1传入,然后您可以使用:< / p>

a=${query[$1]}
echo Candidate[$1]=$a

如果您只想在该行显示结果而没有Candidate[]文本,那么您可以回复:

echo ${query[$1]}

答案 1 :(得分:1)

如果我已正确理解你的问题,在你的echo语句打印输出之前,请把这行:

read dummy

这将提示您输入一些键,输入后将显示下一行输出。