免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2793 | 回复: 6
打印 上一主题 下一主题

[求助]又碰到管道传参的问题了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-05 21:46 |只看该作者 |倒序浏览
用shell简单包装了一下db2的命令,主要是为了捕捉错误跳出,因为shell上一行报错,下一行还照样执行,函数如下
exdb2() {

if [ $# -eq 1 ]
then
        sqlBuff="$1"
        tip=""
elif [ $# -eq 2 ]
then
        sqlBuff="$2"
        tip="$1"
else
        echo "PARAMETER NUMBER ERROR!!!"
#       exit -1
fi

db2 ${tip} "${sqlBuff}"

if [ $? -ne 0 ]
then
        echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Sql Error <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
        echo "${sqlBuff}"
#       exit -1
fi
}


主要是判断 db2 ${tip} "${sqlBuff}" 有没有语法错误,单独执行是没问题的

[db2inst1@domain~]$ exdb2 "select count(*),'NUM' from syscat.tables where tabname='TEST'"
1           2  
----------- ---
          1 NUM
  1 record(s) selected.
[db2inst1@domain~]$

但我想把结果做筛选,传给grep就有问题了

[db2inst1@domain~]$ exdb2 "select count(*),'NUM' from syscat.tables where tabname='TEST'" | grep NUM
select count(*),'NUM' from syscat.tables where tabname='TEST'
[db2inst1@domain~]$

照理说应该输出
          1 NUM
才对嘛,大家帮我看看问题在哪里

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2009-08-05 21:59 |只看该作者
确实是这样吗?

论坛徽章:
0
3 [报告]
发表于 2009-08-05 22:22 |只看该作者

回复 #1 kenshinsee 的帖子

try:


{exdb2 "select count(*),'NUM' from syscat.tables where tabname='TEST'" }| grep NUM

论坛徽章:
0
4 [报告]
发表于 2009-08-07 21:42 |只看该作者
[db2inst1@domain~]$ {exdb2 "select count(*),'NUM' from syscat.tables where tabname='TEST'" }| grep NUM
bash: {exdb2: command not found
[db2inst1@domain~]$

加大括号是什么意思啊,还是不行哎,我找来找去没发现原因。。。

我用的shell是 bash-3.2-9.fc7

[ 本帖最后由 kenshinsee 于 2009-8-7 21:44 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-08-07 21:57 |只看该作者
哦,我发现了一个问题,我上面封装的函数中,在SQL执行错误时候会打印错误的SQL
echo "${sqlBuff}"
如果我把这句注释掉,
那我在command中
exdb2 "select count(*),'NUM' from syscat.tables where tabname='TEST'" | grep NUM
出来结果就什么都没有

[db2inst1@domain~]$ exdb2 "select count(*),'NUM' from syscat.tables" | grep NUM
[db2inst1@domain~]$

这就说明了我执行exdb2实际是上出错了,但我不知道错哪里。。。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2009-08-07 22:24 |只看该作者

回复 #5 kenshinsee 的帖子

db2 ${tip} "${sqlBuff}"这句有问题吧。

论坛徽章:
0
7 [报告]
发表于 2009-08-08 15:13 |只看该作者
BLACK兄提示
刚才把脚本中的 db2 ${tip} "${sqlBuff}" 结果输出到文件
db2 ${tip} "${sqlBuff}" >a
不用grep正常输出
1           2
----------- ---
        372 NUM

  1 record(s) selected.

使用了grep,DB没有连接
SQL1024N  A database connection does not exist.  SQLSTATE=08003

然后我再exdb2函数第一句加上 db2 connect to db_1进行数据库连接就正常输出了

但我不能理解为什么不加grep时候可以正常输出呢

我用grep过滤时候是通过管道传给grep的,那管道前面的exdb2应该还是在我command的shell中,我的command shell中是有连接了数据库的, 真奇怪啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP