Chinaunix

标题: shell脚本遇到一灵异现象,求解 [打印本页]

作者: pxf520    时间: 2012-05-10 09:40
标题: shell脚本遇到一灵异现象,求解
本帖最后由 pxf520 于 2012-05-10 10:02 编辑

脚本的名字只要带有“zombie”字样,就不能正常运行,改成其他名字能正常运行.

[root@localhost libexec]# ./check_zombie -w 2 -c 3
./check_zombie: line 8: [: too many arguments
./check_zombie: line 13: [: too many arguments
./check_zombie: line 18: [: too many arguments
[root@localhost libexec]# ./check_zombie -w 2 -c 3
./check_zombie: line 8: [: too many arguments
./check_zombie: line 13: [: too many arguments
./check_zombie: line 18: [: too many arguments
[root@localhost libexec]# mv check_zombie check_zom
[root@localhost libexec]# ./check_zom -w 1 -c 3
OK - zombie process is 0
[root@localhost libexec]# ./check_zom -w 2 -c 3
OK - zombie process is 0
[root@localhost libexec]# mv check_zom zombie
[root@localhost libexec]# ./zombie -w 2 -c 3
./zombie: line 8: [: too many arguments
./zombie: line 13: [: too many arguments
./zombie: line 18: [: too many arguments
[root@localhost libexec]# ./zombie -w 1 -c 3
./zombie: line 8: [: too many arguments
./zombie: line 13: [: too many arguments
./zombie: line 18: [: too many arguments
[root@localhost libexec]# mv zombie test
[root@localhost libexec]# ./test - 1 -c 3
OK - zombie process is 0
[root@localhost libexec]# cat test
  1. #!/bin/sh
  2. if [ $# -ne 4 ]
  3. then
  4. echo "Usage:$0 -w num1 -c num2"
  5. exit 3
  6. fi
  7. ZOM=`top -b -n1|awk '/zombie/ {print $10}'`
  8. if [ $ZOM -lt $2 ]
  9. then
  10. echo "OK - zombie process is $ZOM"
  11. exit 0
  12. fi
  13. if [ $ZOM -gt $2 -a $ZOM -lt $4 ]
  14. then
  15. echo "Warning - zombie process is $ZOM"
  16. exit 1
  17. fi
  18. if [ $ZOM -gt $4 ]
  19. then
  20. echo "Critical - zombie process is $ZOM"
  21. exit 2
  22. else
  23. exit 3
  24. fi
复制代码

作者: waker    时间: 2012-05-10 10:03
echo $ZOM自己观察一下吧
作者: pxf520    时间: 2012-05-10 10:05
waker 发表于 2012-05-10 10:03
echo $ZOM自己观察一下吧
  1. [root@localhost libexec]# bash -x check_zombie -w 1 -c 3
  2. + '[' 4 -ne 4 ']'
  3. ++ top -b -n1
  4. ++ awk '/zombie/ {print $10}'
  5. + ZOM=0
  6. + '[' 0 -lt 1 ']'
  7. + echo 'OK - zombie process is 0'
  8. OK - zombie process is 0
  9. + exit 0
  10. [root@localhost libexec]# echo $ZOM

  11. [root@localhost libexec]#
复制代码

作者: waker    时间: 2012-05-10 10:12
回复 3# pxf520

你回复这一堆跟echo $ZOM有嘛关系啊?
作者: waker    时间: 2012-05-10 10:14
...
exit 3
fi
ZOM=`top -b -n1|awk '/zombie/ {print $10}'`
echo $ZOM
...
作者: pxf520    时间: 2012-05-10 10:19
问题是改了脚本的名称就能正常运行
作者: waker    时间: 2012-05-10 10:31
俺只能给个建议,听不听的见自己决定
作者: pxf520    时间: 2012-05-10 10:42
waker 发表于 2012-05-10 10:31
俺只能给个建议,听不听的见自己决定


按你说的试了一下,也执行不了
作者: pxf520    时间: 2012-05-10 10:56
找到原因了
作者: huohulwz    时间: 2012-05-10 11:15
回复 9# pxf520


    第一感觉是
ZOM=`top -b -n1|awk '/zombie/ {print $10}'`, 这一行awk先运行, 结果找到了自己的zombie,
再往下看, 没看到楼主的变量ZOM内容的消息了,  楼主有空还是说说到底哪门回事, 这脚本我机器上显示bad number, 大概可能或许是top排版不同
作者: mpstat    时间: 2012-05-10 11:22
这代码都不带缩进的,牛逼啊
作者: pxf520    时间: 2012-05-10 14:47
huohulwz 发表于 2012-05-10 11:15
回复 9# pxf520



脚本名字含有“zombie”,这样top的时候就会出现2个zombie了,所以取值就不正确了
作者: zooyo    时间: 2012-05-10 19:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: freeterman    时间: 2012-05-11 08:21
其实可以使用sh -x调试的 这样就出现执行过程了 多好
作者: pxf520    时间: 2012-05-11 10:47
freeterman 发表于 2012-05-11 08:21
其实可以使用sh -x调试的 这样就出现执行过程了 多好


这个知道,你没看到吗,即使-x 过程也是ok的
作者: pxf520    时间: 2012-05-11 10:48
mpstat 发表于 2012-05-10 11:22
这代码都不带缩进的,牛逼啊

我又不是开发,再说这么几行代码,没必要缩进,自己看着方便就ok
作者: waker    时间: 2012-05-11 10:56
pxf520 发表于 2012-05-11 10:47
这个知道,你没看到吗,即使-x 过程也是ok的

第一写
#!/bin/sh -x

用./urscript执行试试

让你echo $ZOM是因为这是个华问题,有兴趣可参

http://bbs.chinaunix.net/thread-733138-1-1.html
作者: xujohnn    时间: 2012-05-11 16:38
[root@WTCCN-VM-RT ~]# ./zombie -w 1 -c 3
#!/bin/sh -xv
if [ $# -ne 4 ]
then
echo "Usage0 -w num1 -c num2"
exit 3
fi
+ '[' 4 -ne 4 ']'
ZOM=`top -b -n1|awk '/zombie/ {print $10}'`
top -b -n1|awk '/zombie/ {print $10}'
++ top -b -n1
++ awk '/zombie/ {print $10}'
+ ZOM='1
0.1
0.0'
if [ $ZOM -lt $2 ]
then
echo "OK - zombie process is $ZOM"
exit 0
fi
+ '[' 1 0.1 0.0 -lt 1 ']'
./zombie: line 8: [: too many arguments
if [ $ZOM -gt $2 -a $ZOM -lt $4 ]
then
echo "Warning - zombie process is $ZOM"
exit 1
fi
+ '[' 1 0.1 0.0 -gt 1 -a 1 0.1 0.0 -lt 3 ']'
./zombie: line 13: [: too many arguments
if [ $ZOM -gt $4 ]
then
echo "Critical - zombie process is $ZOM"
exit 2
else
exit 3
fi
+ '[' 1 0.1 0.0 -gt 3 ']'
./zombie: line 18: [: too many arguments
+ exit 3

作者: zx1986711    时间: 2012-05-13 19:30
[ ] 是test命令,养成里面的变量全部加双引号的习惯就不会遇到这种错了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2