我正在编写脚本,尝试从表中获取日期时遇到问题。我在将其存储到变量时遇到问题。我总是得到错误: 放置不正确的()。
变量TIMEFRAME是“ D”,并且外壳实际上进入了IF,密码也不是问题,因为我使用它手动连接并检查了查询(这里没有问题)。
这是我遇到问题的脚本部分。
#!/bin/csh -f
if ( $TIMEFRAME == "D" ) then
set TIMEBEG = `sqlplus -s $PASSWORD << EOF \
set head off; \
set feed off; \
select to_char(trunc(sysdate) - 1,'YYYYMMDD') from dual; \
exit; \
EOF`
set TIMEEND = $TIMEBEG"235959"
set TIMEBEG = $TIMEBEG"000000"
endif
我也试图将其存储在文件中,同样的问题
#!/bin/csh -f
set tmp_file=/tmp/tmp.$$
if ( $TIMEFRAME == "D" ) then
sqlplus -s $PASSWORD > $tmp_file << EOF \
set head off \
set feed off \
select to_char(trunc(sysdate) - 1,'YYYYMMDD') from dual; \
exit; \
EOF
set TIMEBEG=`cat $tmp_file`
set TIMEEND = $TIMEBEG"235959"
set TIMEBEG = $TIMEBEG"000000"
endif
我尝试了不同的解决方案,但又遇到了同样的问题,尝试不使用分号,不使用SET来将其放在一行上,这使我失去了创意。
尝试使用-xvf时,这是我进入该部分时所得到的:
if ( $TIMEFRAME == "D" ) then
if ( D == D ) then
sqlplus -s $PASSWORD > $tmp_file << EOF set head off set feed off select to_char ( trunc ( sysdate ) - 1,'YYYYMMDD' ) from dual ; exit ; EOF
Badly placed ()'s.
有什么想法吗?它正在Amazon Linux上运行
答案 0 :(得分:0)
我不确定您是否可以在C shell中的反引号内使用here-doc。
将sqlplus输入写入文件中,而不是编写整个sqlplus命令。
#!/bin/csh -f
set tmp_file=/tmp/tmp.$$
if ( $TIMEFRAME == "D" ) then
cat > $tmp_file <<EOF
set head off
set feed off
select to_char(trunc(sysdate) - 1, 'YYYYMMDD') from dual;
exit;
EOF
set TIMEBEG = `sqlplus -s $PASSWORD < $tmp_file`
set TIMEEND = $TIMEBEG"235959"
set TIMEBEG = $TIMEBEG"000000"
endif