Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2710247
  • 博文数量: 576
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 6319
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(576)

文章存档

2022年(68)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

分类: LINUX

2022-01-19 18:37:05

对于文本中有空格时,for循环读取的信息会被拆分成多个,而while read却不会搞乱。

假设信息存放在test.txt中:



比较 while read和for的输出效果,如下图:


示例代码:
  1. [oracle@bjdb ~]$ cat test.txt |while read i
  2. > do
  3. > echo $i
  4. > done
  5. sys/oracle@127.0.0.1:1521/orcl as sysdba
  6. test/XX_1234567@192.168.204.134:1521/orcl
  7. 还是一行一行的,保持和原文一致。

  8. [oracle@bjdb ~]$ for i in `cat test.txt`
  9. > do
  10. > echo $i
  11. > done
  12. sys/oracle@127.0.0.1:1521/orcl
  13. as
  14. sysdba
  15. test/XX_1234567@192.168.204.134:1521/orcl
  16. 这里的for循环就把空格也当作一个分隔符,输出了多条,不符合要求

    创建一个脚本,getuser.sh 读取数据库列表后,将信息输出到一个csv文件。

    getuser.sh 内容如下:
    1. #!/bin/bash
    2. # 读取 交易系统_20.59,sys/oracle@192.168.20.59:1521/orcl as sysdba 连接数据库
    3. # 执行sql
    4. source ~/.bash_profile

    5. cat $1 | while read i
    6. do
    7. mc=`echo $i | awk -F [,] '{print $1}'`
    8. db=`echo $i | awk -F [,] {'print $2'}`
    9. rq=`date +%Y%m%d`

    10. echo '--' $i

    11. sqlplus -S $db<<EOF
    12. define mc=$mc
    13. define rq=$rq
    14. set colsep ','
    15. set pagesize 9999 lin 250 echo off heading off verify off feedback off trims on

    16. spool user_$mc_$rq.csv
    17. col mc for a20
    18. col rq for a12
    19. col username for a30
    20. select '&mc' mc, '&rq' rq, username from dba_users;
    21. spool off

    22. EOF
    23. done
  17. 连接串信息:

  18. 执行getuser.sh 
  19. 生成的文件内容如下:


  20. 巡检一百个数据库都不怕。
阅读(256) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~