当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 大侠帮我看看这if fi的shellscript为何会运行不正常?
帖子发表于 : 2011-01-14 10:27 

注册: 2010-11-27 22:20
帖子: 76
送出感谢: 0 次
接收感谢: 0 次
根据鸟哥的教材写的一个shellscript
testing=$(netstat -tun | grep ":80 ") # 偵測看 port 80 在否?
if [ "$testing" != "" ]; then
echo "WWW is running in your system."
fi
testing=$(netstat -tun | grep ":22 ") # 偵測看 port 22 在否?
if [ "$testing" != "" ]; then
echo "SSH is running in your system."
fi
testing=$(netstat -tun | grep ":21 ") # 偵測看 port 21 在否?
if [ "$testing" != "" ]; then
echo "FTP is running in your system."
fi
testing=$(netstat -tun | grep ":25 ") # 偵測看 port 25 在否?
if [ "$testing" != "" ]; then
echo "Mail is running in your system."
fi

我直接netstat -tun,目前是只有tcp80端口的链接,根本没有SSH、FTP、MAIL的链接,根据以上shell的判断,运行结果照例是会只输出显示"WWW is running in your system.",但是我实际输出结果却是四个echo都显示了出来,请问为何?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 大侠帮我看看这if fi的shellscript为何会运行不正常?
帖子发表于 : 2011-01-14 10:32 
头像

注册: 2008-12-06 10:38
帖子: 4566
送出感谢: 23
接收感谢: 31
if判断后为什么要写分号?


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 大侠帮我看看这if fi的shellscript为何会运行不正常?
帖子发表于 : 2011-01-14 10:32 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
分清楚是字符串比较,还是数值比较。变量别用“”包裹。
结果赋值,根本不需要。你应该判断$?。
netstat -tun | grep ':80 '
[ $? ] && echo no || echo yes


_________________
● 鸣学


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 大侠帮我看看这if fi的shellscript为何会运行不正常?
帖子发表于 : 2011-01-14 17:41 

注册: 2006-11-27 14:21
帖子: 49
送出感谢: 0 次
接收感谢: 0 次
我这里运行你的脚本是正常的,我测试了启动和不启动WWW,启动和不启动SSH,结果如预期。


_________________
我的百度空间: http://hi.baidu.com/huangyunict/
我的个人主页:http://www.comp.nus.edu.sg/~huangyun/


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 大侠帮我看看这if fi的shellscript为何会运行不正常?
帖子发表于 : 2011-01-14 18:33 
头像

注册: 2008-09-18 13:11
帖子: 2770
送出感谢: 1
接收感谢: 449
在代码前加个
set -x
再运行看看问题出在哪里


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 大侠帮我看看这if fi的shellscript为何会运行不正常?
帖子发表于 : 2011-01-21 9:53 
头像

注册: 2009-01-11 21:38
帖子: 198
送出感谢: 0 次
接收感谢: 0 次
楼主的脚本是可以正常运行的,但根据楼主的命令判断会出问题
我的系统根本没有运行WEB服务,但脚本输出“WWW is running in your system.”
其实只是我的系统访问外面的web服务,所以还是根据ps命令的输出来判断比较靠谱
另外我比较习惯下面的写法:
[bash]
if ps -ef | grep [h]ttpd >/dev/null 2>&1;then #httpd服务
echo "WWW is running in your system."
fi
[/bash]


_________________
以缺德服人......


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 大侠帮我看看这if fi的shellscript为何会运行不正常?
帖子发表于 : 2011-01-21 22:30 
头像

注册: 2007-03-24 23:45
帖子: 2357
送出感谢: 0 次
接收感谢: 9
是不是你的sh版本问题?
还有,测试字符串是否为空,兼容性最好的方法是
代码:
[ x"$var" = x ]

或者,好看的方法是
代码:
[ -z "$var" ]


还有,变量用双引号引起来是很好的习惯,除非你的是数值


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 大侠帮我看看这if fi的shellscript为何会运行不正常?
帖子发表于 : 2011-01-24 9:54 

注册: 2008-10-31 22:12
帖子: 6546
系统: 践兔
送出感谢: 18
接收感谢: 25
代码:
tlcr: 0 庚寅年十二月廿一日 9:48 ~
● dog > /tmp/test
testing=$(netstat -tun | grep ":80 ") # 偵測看 port 80 在否?
if [ "$testing" != "" ]; then
echo "WWW is running in your system."
fi
testing=$(netstat -tun | grep ":22 ") # 偵測看 port 22 在否?
if [ "$testing" != "" ]; then
echo "SSH is running in your system."
fi
testing=$(netstat -tun | grep ":21 ") # 偵測看 port 21 在否?
if [ "$testing" != "" ]; then
echo "FTP is running in your system."
fi
testing=$(netstat -tun | grep ":25 ") # 偵測看 port 25 在否?
if [ "$testing" != "" ]; then
echo "Mail is running in your system."
fi
tlcr: 0 庚寅年十二月廿一日 9:48 ~
● bash /tmp/test
WWW is running in your system.
tlcr: 0 庚寅年十二月廿一日 9:48 ~
● dash /tmp/test
WWW is running in your system.
tlcr: 0 庚寅年十二月廿一日 9:48 ~
● sh /tmp/test
WWW is running in your system.
tlcr: 0 庚寅年十二月廿一日 9:48 ~

肯定是没问题


_________________
代码:
] ls -ld //


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译