免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: taosicai
打印 上一主题 下一主题

[文本处理] 自动巡检脚本切换用户后不好用!急!!! [复制链接]

论坛徽章:
1
巨蟹座
日期:2013-10-12 09:53:21
11 [报告]
发表于 2013-07-31 15:26 |只看该作者
回复 8# wenhq


    我还是用刚才的a.sh修改去掉<<EOF和EOF
再运行的,结果是for整个循环体被忽略。
无错误也无结果
我在想,先将变量放到一个变量中,再从这个变量中提出来,差不多能行吧?!

论坛徽章:
1
巨蟹座
日期:2013-10-12 09:53:21
12 [报告]
发表于 2013-07-31 15:30 |只看该作者
回复 9# wenhq


   db2 list db directory | awk '/Database name/{print $NF}'
上面这行用db2inst1执行结果正确

for i in $(db2 list db directory | awk '/Database name/{print $NF}')
上面这行和如下行一样,上午已经试过
for i in `db2 list db directory | awk '/Database name/{print $NF}'`

另外
for i  和 for DBN效果也一样

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
13 [报告]
发表于 2013-07-31 15:41 |只看该作者
  1. for DBN in $(db2 list db directory | awk '/Database name/{print $NF}')
  2. do
  3.     echo $DBN
  4. done
复制代码
bash -vx test1.sh
  1. su - db2inst1 <<EOF
  2. for DBN in $(db2 list db directory | awk '/Database name/{print $NF}')
  3. do
  4.     echo $DBN
  5. done
  6. EOF
复制代码
bash -vx test2.sh

先看看为什么for循环的控制变量DBN取不到值

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每月发帖之星
日期:2015-09-11 19:30:52IT运维版块每周发帖之星
日期:2015-09-11 19:20:31IT运维版块每日发帖之星
日期:2015-08-26 06:20:00每日论坛发贴之星
日期:2015-08-20 06:20:00IT运维版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
14 [报告]
发表于 2013-07-31 15:54 |只看该作者
   db2 list db directory | awk '/Database name/{print $NF}' > list

for i in `cat list`

do

something action

done
try this ?

论坛徽章:
1
巨蟹座
日期:2013-10-12 09:53:21
15 [报告]
发表于 2013-07-31 16:26 |只看该作者
本帖最后由 taosicai 于 2013-07-31 16:58 编辑

回复 12# Shell_HAT


    [DEP23@/home/db2inst1/test/b]bash -vx test1.sh
ksh: bash:  not found.
[DEP23@/home/db2inst1/test/b]ksh -vx test1.sh
for DBN in $(db2 list db directory | awk '/Database name/{print $NF}')
do
    echo $DBN
done
+ awk /Database name/{print $NF}
+ db2 list db directory
+ echo GBATCH
GBATCH
+ echo GBATCH
GBATCH
+ echo CARDP
CARDP
[DEP23@/home/db2inst1/test/b]ksh -vx test2.sh
su db2inst1 <<EOF
for DBN in $(db2 list db directory | awk '/Database name/{print $NF}')
do
    echo $DBN
done
EOF
+ su db2inst1
+ 0<<
for DBN in + db2 list db directory
+ db2 list db directory
+ awk /Database name/{print $NF}
+ awk /Database name/{print $NF}
GBATCH
GBATCH
CARDP
do
    echo
done
db2inst1's Password:
ksh: 0403-057 Syntax error at line 3 : `GBATCH' is not expected.
[DEP23@/home/db2inst1/test/b]

说明,这是一台开发服务器,root用户密码无从知晓,我是从另一个用户bank下执行的。
不知道报这个错误与切用户环境是否有关?!

论坛徽章:
1
巨蟹座
日期:2013-10-12 09:53:21
16 [报告]
发表于 2013-07-31 16:55 |只看该作者
回复 13# wenhq


   报错:
cat: list: No such file or directory

我用转变量的方法
dbs=`db2 list db directory | awk '/Database name/{print $NF}'`
echo $dbs
for dbn in $dbs
do
  echo "db2 connect to " $dbn
  db2 connect to $dbn
  echo "___"
done
方法可行,但是再加上su - db2inst1就不行了

论坛徽章:
1
巨蟹座
日期:2013-10-12 09:53:21
17 [报告]
发表于 2013-07-31 18:20 |只看该作者
回复 16# Shell_HAT


    兄弟,您实在是帅呆了。问题解决。
但不太明白db2 list db directory | sed '/Database name/!d; s/.* //'
为什么就是我想要的结果?

明天贴我脚本的样例给后来者学习。晚安,各位!

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
18 [报告]
发表于 2013-07-31 19:55 |只看该作者
回复 17# taosicai


正则表达式的贪婪性
http://bbs.chinaunix.net/thread-15825-1-1.html

论坛徽章:
1
巨蟹座
日期:2013-10-12 09:53:21
19 [报告]
发表于 2013-08-01 14:38 |只看该作者
回复 2# Shell_HAT


su - db2inst1 -c "
for DBN in \$(db2 list db directory | sed '/Database name/!d; s/.* //')
do
  echo 'db2 connect to ' $dbn
  db2 connect to $dbn
  echo '_________'
  db2 'db2 'SELECT BPNAME, NPAGES, PAGESIZE FROM SYSCAT.BUFFERPOOLS'
  echo '_________'
done
"

上面select可能,但象下面这样带where条件该如何转义呀?
db2 'db2 'SELECT BPNAME, NPAGES, PAGESIZE FROM SYSCAT.SCHEMATA WHERE OWNER<>"SYSIBM"'
上午试了一上午也没成功!!!请各位帮忙解答下

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
20 [报告]
发表于 2013-08-01 15:31 |只看该作者
回复 19# taosicai
  1. su - db2inst1 -c "
  2. for DBN in \$(db2 list db directory | sed '/Database name.*SAMPLE/!d; s/.* //')
  3. do
  4.     echo db2 connect to \$DBN
  5.     db2 connect to \$DBN
  6.     # echo '_________'
  7.     # db2 'SELECT BPNAME, NPAGES, PAGESIZE FROM SYSCAT.BUFFERPOOLS'
  8.     # echo '_________'
  9.     db2 \"SELECT * FROM SYSCAT.SCHEMATA WHERE OWNER='SYSIBM'\"
  10.     db2 disconnect \$DBN
  11. done
  12. "
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP