[新手求助]问人极简单但又困扰我很久的问题!!

-编译-人生- 2010-11-04 04:15:39
想做个定时任务
定时用fping,检测多台主机的网络是否正常。
写了个简单的定时任务,运行一个sh运行脚本,但总是报怨错。
代码如下:
#!/bin/sh
fping 192.168.1.1 > fping.log
fping 192.168.1.18 >> fping.log
fping 192.168.1.17 >> fping.log

cat fping.log | while read line
do
echo $line
echo ${line:0-4}
if [[${line:0-4} == "live"]]
then
date >> error.log
echo $line >> error.log
else
echo "$line ok" >> check.log
fi
done

但总是报错
192.168.1.1 is alive
live
fping.sh: line 10: [[live: command not found
192.168.1.18 is alive
live
fping.sh: line 10: [[live: command not found
192.168.1.17 is unreachable
able
fping.sh: line 10: [[able: command not found

也就是第10行这种比较字符串的比较方法不行。
我上网也搜索了一下,但还是没有找到合适的方法,请高手们指点一下。
...全文
74 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
freetstar 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 forest_boy 的回复:]

在这谢谢lgxwqq111对我的不断帮助,帮我这个新手菜鸟一步步调出来。
[/Quote]
其实是我菜
-编译-人生- 2010-11-04
  • 打赏
  • 举报
回复
在这谢谢lgxwqq111对我的不断帮助,帮我这个新手菜鸟一步步调出来。
-编译-人生- 2010-11-04
  • 打赏
  • 举报
回复
终于调出来了,看来关键问题还是在if判断里面的空格,没想到shell里的格式要求这么严格。
最后的代码如下:
#!/bin/sh
fping 192.168.1.1 > fping.log
fping 192.168.1.18 >> fping.log
fping 192.168.1.17 >> fping.log

cat fping.log | while read line
do
echo $line
echo ${line:0-4}
if [[ ${line:0-4} == "live" ]]
then
echo "$line ok" >> check.log
else
date >> error.log
echo $line >> error.log
fi
done
freetstar 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 forest_boy 的回复:]

引用 10 楼 lgxwqq111 的回复:

引用 9 楼 forest_boy 的回复:

引用 8 楼 lgxwqq111 的回复:
我晕了

我晕呀,帮帮我这个新手呀。

等我回学校吃完饭想想

这回轮到我晕了
[/Quote]
我shell菜鸟。。主席不在,哈哈,
-编译-人生- 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lgxwqq111 的回复:]

引用 9 楼 forest_boy 的回复:

引用 8 楼 lgxwqq111 的回复:
我晕了

我晕呀,帮帮我这个新手呀。

等我回学校吃完饭想想
[/Quote]
这回轮到我晕了
freetstar 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 forest_boy 的回复:]

引用 8 楼 lgxwqq111 的回复:
我晕了

我晕呀,帮帮我这个新手呀。
[/Quote]
等我回学校吃完饭想想
-编译-人生- 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lgxwqq111 的回复:]
我晕了
[/Quote]
我晕呀,帮帮我这个新手呀。
freetstar 2010-11-04
  • 打赏
  • 举报
回复

我晕了
-编译-人生- 2010-11-04
  • 打赏
  • 举报
回复
哦,谢谢,明白错在哪了。
但又有新的问题出现了。为什么我的比较都是走的false呢?
明明前两个循环的字符串是应该是true。

设置我把==改为!=也都是false
是我的if判断写错了吗?
freetstar 2010-11-04
  • 打赏
  • 举报
回复
这样写: if [[ ${line:0-4} == "live" ]]
freetstar 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 forest_boy 的回复:]

我去掉了空格
if [[${line:0-4}=="live"]]

但还是报错
fping.sh: line 10: [[live==live]]: command not found
[/Quote]
[[ live=live ]]
-编译-人生- 2010-11-04
  • 打赏
  • 举报
回复
我去掉了空格
if [[${line:0-4}=="live"]]

但还是报错
fping.sh: line 10: [[live==live]]: command not found
freetstar 2010-11-04
  • 打赏
  • 举报
回复
[[ cmd ]]注意空格
-编译-人生- 2010-11-04
  • 打赏
  • 举报
回复
标题打错了,应该是【问个极简单但又困扰我很久的问题】五笔的悲哀。
我又错了
-编译-人生- 2010-11-04
  • 打赏
  • 举报
回复
标题打错了,应该是【问人极简单但又困扰我很久的问题】五笔的悲哀。

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧