一个关于cshell数据库交互的问题

opps_zhou 2011-03-25 09:22:26
我现在要写一个 cshell ,需要从数据库查一些数据出来,我写了段如下代码,但是一直出错,请高手指导一下。

#!/bin/csh

set VERSION = `sqlplus -L -S "$DBLOGIN" << !\
set heading off;\
set pagesize 0;\
set feedback off;\
set verify off;\
set echo off;\
select count(*) from dual;\
exit;\
!`

错误消息如下:
set: Variable name must begin with a letter.
set: No match.
...全文
2060 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2011-03-25
  • 打赏
  • 举报
回复
笨办法,用临时文件倒腾一下吧
opps_zhou 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 masmaster 的回复:]

set: Variable name must begin with a letter #变量必须是一个字母开头
set: No match. #不匹配
[/Quote]

这个报错是因为我们 `` 中间有一个 set pagesize 0,把 0 当成变量了,所以我说我怀疑是没有把``中间当成一个完整命令执行。
justkk 2011-03-25
  • 打赏
  • 举报
回复
哦 我之前是在AIX环境试验的
在linux环境试了下,也不行
masmaster 2011-03-25
  • 打赏
  • 举报
回复
set: Variable name must begin with a letter #变量必须是一个字母开头
set: No match. #不匹配
opps_zhou 2011-03-25
  • 打赏
  • 举报
回复
顺便说一下我的版本
# cat /etc/issue

Welcome to SUSE Linux Enterprise Server 10 SP1 (x86_64) - Kernel \r (\l).

sqlplus -v

SQL*Plus: Release 11.1.0.7.0 - Production
opps_zhou 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 justkk 的回复:]

检查一下你的文件格式
file test.sh
[/Quote]

test.sh: C shell script text
opps_zhou 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 steptodream 的回复:]

=前后要么各留一个空格
要么不留空格 检查一下你的实际代码
[/Quote]

我留不留空格都尝试过。。。一直有错,本来一开始我用 bash 写好了的,但是因为执行的用户是 csh 的,同时要在脚本里加上 source ~/.cshrc 的命令,所以没办法要用 csh 写
justkk 2011-03-25
  • 打赏
  • 举报
回复
检查一下你的文件格式
file test.sh
opps_zhou 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 justkk 的回复:]

set b = `sqlplus -L -S u/u@t << !\
set head off;\
select count(*) from dual;\
!\
`
试验了一下,这样也是可以的
[/Quote]

我把你的代码放到我的脚本里,也报错:Badly placed ()'s.

难道环境还需要有什么特别设置?

执行脚本的用户也是 /bin/csh 的,执行脚本也是使用的 ./test.sh 或者 csh test.sh
justkk 2011-03-25
  • 打赏
  • 举报
回复
set b = `sqlplus -L -S u/u@t << !\
set head off;\
select count(*) from dual;\
!\
`
试验了一下,这样也是可以的
steptodream 2011-03-25
  • 打赏
  • 举报
回复
=前后要么各留一个空格
要么不留空格 检查一下你的实际代码
opps_zhou 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 justkk 的回复:]

最后一个反引号`要单写一行
[/Quote]
这个我之前就试过,但还是相同的问题
感觉根本没有把``里所有的语句当成一个命令来执行
justkk 2011-03-25
  • 打赏
  • 举报
回复
最后一个反引号`要单写一行
opps_zhou 2011-03-25
  • 打赏
  • 举报
回复
我就是不知道我错在什么地方,``中间的部分,我直接执行是可以成功的,加上``就是失败,昨天在网上查了一天就查出在``部分换行需要加上\
justkk 2011-03-25
  • 打赏
  • 举报
回复
参考
#!/bin/csh

set a = `cat << !\
hello\
!\
`
echo $a
opps_zhou 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 justkk 的回复:]

笨办法,用临时文件倒腾一下吧
[/Quote]

目前也只好这样了

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧