gpt4 book ai didi

linux - 在 shell 脚本中传递给 sqlplus 的多个参数未被接受

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:16 30 4
gpt4 key购买 nike

我正在尝试执行一个 shell 脚本,其中将 shell 脚本中具有值的变量传递给 sqlplus。但它因以下错误而失败,并且 EOF 也造成了问题。

yr_bkp1=$(date +"%Y")

dt_bkp1=$(date +"%d" --date="yesterday")

mn_bkp1=$(date +"%b")

mo_bkp1=$(echo "$mn_bkp1" | tr '[:lower:]' '[:upper:]')

check_fold_size_bkp1=`du -h /archive/node1/bkp/HRMIS_NODE1_PRODFULL_$yr_bkp1$mo_bkp1$dt_bkp1`

size_bkp1=$(echo $check | head -n1 | awk '{print $1;}')

loc_bkp1=$(echo $check | head -n1 | awk '{print $2;}')

cd /archive/node1/bkp/HRMIS_NODE1_PRODFULL_$yr_bkp1$mo_bkp1$dt_bkp1

clnt_cnt1=$(ls -ltr

/archive/node1/bkp/HRMIS_NODE1_PRODFULL_$yr_bkp1$mo_bkp1$dt_bkp1/*.gz | wc -l)

export ORACLE_HOME=/apps/oracle/oracle_ee/product/11.2.0/dbhome

/oracle_ee/sqlplus DBA_SCHEMA/sting23ret@CENTREPO @/rmanbkp/exp_bkp_hpay_essdb/test.sql $loc_bkp1 $clnt_cnt1 <<EOF
EOF

当我尝试执行它时,它只选择了一个参数值,我遇到了以下错误

2015

15

JAN

13G /archive/node1/bkp/HRMIS_NODE1_PRODFULL_2015JAN15

296

SQL*Plus: Release 11.2.0.3.0 Production on Fri Jan 16 19:23:01 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

old 1: insert into test (TEST1,TEST2) values ('&1','')

new 1: insert into test (TEST1,TEST2) values ('296','')

1 row created.

Commit complete.
Enter value for 2: old 1: insert into test (TEST1,TEST2) values ('','&2')
new 1: insert into test (TEST1,TEST2) values ('','EOF ')

1 row created.

Commit complete.

Commit complete.

Disconnected from oracle......

当我单独复制行时

/apps/oracle/oracle_ee/product/11.2.0/dbhome/bin/sqlplus LOGIN/PASSWORD@DATABASE @/rmanbkp/scripts/exp_bkp_hpay_essdb_info/exp_bkp_hpay_essdb_ins.sql $loc_bkp1 $clnt_cnt1 <<EOF  

它正在获取参数值并插入到表中。可能是什么原因。我需要在代码中做哪些更改。请告诉我。

最佳答案

$loc_bkp1 将是空的,因为当您尝试设置它时命名不一致。你从这里得到 $check_fold_size_bkp1:

check_fold_size_bkp1=`du -h /archive/node1/bkp/HRMIS_NODE1_PRODFULL_$yr_bkp1$mo_bkp1$dt_bkp1`

但是当您获得接下来的两个变量时,您引用的是 $check,而不是 $check_fold_size_bkp1。所以它看起来像你想要的:

size_bkp1=$(echo $check_fold_size_bkp1 | head -n1 | awk '{print $1;}')
loc_bkp1=$(echo $check_fold_size_bkp1 | head -n1 | awk '{print $2;}')

您也可以考虑用双引号将参数括起来,以防万一最终还是空白;我还建议您使用 -s-l 标志来隐藏 SQL*Plus 横幅并在无法连接到数据库时退出:

/oracle_ee/sqlplus -s -l DBA_SCHEMA/... @.../test.sql "$loc_bkp1" "$clnt_cnt1"

EOF 'heredoc' 在您的示例代码中似乎完全多余。

关于linux - 在 shell 脚本中传递给 sqlplus 的多个参数未被接受,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27985659/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com