免费注册 查看新帖 |

Chinaunix

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

[学习] shell脚本处理sql结果 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-18 15:51 |只看该作者 |倒序浏览
  1. #!/bin/sh
  2. sqlplus oracle/oracle_*\)*!%^ as sysoper <<EOF
  3. select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
  4. commit;
  5. exit;
  6. EOF
复制代码



比如得到上面的时间以后,我需要处理一下再返回结果,应该怎么样写脚本?比如我只要返回最后时间那一行。先感谢各路高手!

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2012-09-18 16:41 |只看该作者
本帖最后由 linux_c_py_php 于 2012-09-18 16:46 编辑

目测此种情况下, 只有高端方案可以解决:

C实现:
  1. #fd = open(".sql_output.tmp", "w"); stdout_backup = dup(1); stderr_backup = dup(2); dup2(fd, 1); dup2(fd, 2);
  2. #do you sql query here ...
  3. #dup2(stdout_backup, 1); dup2(stderr_backup, 2);close(stdout_backup);close(stderr_backup);close(fd);
复制代码
SHELL实现:
  1. #!/bin/sh

  2. exec 5>.sql_output.tmp
  3. exec 3>&1
  4. exec 4>&2
  5. exec 1>&5
  6. exec 2>&5

  7. sqlplus oracle/oracle_*\)*!%^ as sysoper <<EOF
  8. select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
  9. commit;
  10. exit;
  11. EOF

  12. exec 1>&3
  13. exec 2>&4
  14. exec 3>&-
  15. exec 4>&-
  16. exec 5>&-

  17. #在这里读取.sql_output.tmp即可.
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-09-19 10:26 |只看该作者
回复 2# linux_c_py_php
  1. #!/bin/sh

  2. exec 5>.sql_output.tmp
  3. exec 3>&1
  4. exec 4>&2
  5. exec 1>&5
  6. exec 2>&5

  7. sqlplus oracle/oracle_*\)*!%^ as sysoper <<EOF
  8. select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
  9. commit;
  10. exit;
  11. EOF

  12. exec 1>&3
  13. exec 2>&4
  14. exec 3>&-
  15. exec 4>&-
  16. exec 5>&-

  17. cat .sql_output.tmp
复制代码
这样读取不对么?请指点一下。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
4 [报告]
发表于 2012-09-19 11:13 |只看该作者
没有问题吧, 我都是测试过的.

比如:
  1. [liangdong@bb-browser-test00.vm.baidu.com sh_project]$ cat main.sh
  2. #!/bin/bash

  3. #!/bin/sh

  4. exec 5>.sql_output.tmp
  5. exec 3>&1
  6. exec 4>&2
  7. exec 1>&5
  8. exec 2>&5

  9. cat <<EOF
  10. ni hao ma
  11. wo shi liang dong
  12. EOF

  13. exec 1>&3
  14. exec 2>&4
  15. exec 3>&-
  16. exec 4>&-

  17. #在这里读取.sql_output.tmp即可.
  18. cat .sql_output.tmp
  19. [liangdong@bb-browser-test00.vm.baidu.com sh_project]$ ./main.sh
  20. ni hao ma
  21. wo shi liang dong
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-09-19 11:42 |只看该作者
  1. #!/bin/bash
  2. #!/bin/sh

  3. exec 5>.sql_output.tmp
  4. exec 3>&1
  5. exec 4>&2
  6. exec 1>&5
  7. exec 2>&5

  8. cat <<EOF
  9. ni hao!
  10. wo de zhen bu ke yi...
  11. EOF

  12. exec 1>&3
  13. exec 2>&4
  14. exec 3>&-
  15. exec 4>&-


  16. cat .sql_output.tmp
复制代码
  1. [root@localhost ScriptResult]# ./main.sh
  2. -bash: ./main.sh: Permission denied
  3. [root@localhost ScriptResult]# chmod 777 main.sh
  4. [root@localhost ScriptResult]# ./main.sh
  5. -bash: ./main.sh: /bin/bash^M: bad interpreter: No such file or directory
复制代码
惭愧啊。。。我的真不可以。。。。求指教,感谢!

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
6 [报告]
发表于 2012-09-19 11:46 |只看该作者
本帖最后由 linux_c_py_php 于 2012-09-19 11:46 编辑

你没有/bin/bash, 与我无关.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP