QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1982|回复: 16

谁可以帮忙写一个流量换算的bash脚本

[复制链接]
发表于 2004-12-27 13:12:25 | 显示全部楼层 |阅读模式
实际目的是想写一个脚本实现流量单位换算的。
假设a是一个流量值,然后i是从文本文件里读出的单位
i有3种可能 :  
(1) Mb/s
(2) kb/s
(3) b/s
我想写一个脚本,判断这个i的单位,如果是Mb/s直接输出a的值,如果读到的是kb/s就读a/1024的值,如果i读到的结果是b/s就读a除于两个1024,总知目的就是把他们的单位统一成Mb/s
应该怎么写?
这个是我写的测试程序,可是还没写到换算就已经有错误了

[code:1]#!/bin/bash
a='102400'
i=`cat /root/test/indw.txt`
if ["$i" = "Mb/s"]; then
echo $a

echo $b
fi  [/code:1]
发表于 2004-12-27 13:39:22 | 显示全部楼层
改改test语句 :neutral:
应该是这样吧:
[code:1]
[ "$i"=="Mb/s" ]
[/code:1]
等号两边不能有空格,而且是两个等号
回复

使用道具 举报

 楼主| 发表于 2004-12-27 19:43:42 | 显示全部楼层
改了,实际上也能运行但为什么会有这个错误提示呢?
[code:1]./[color=red]test1.sh: line 5: [Mb/s==Mb/s]: 没有那个文件或目录[/color]
15000[/code:1]
回复

使用道具 举报

发表于 2004-12-27 19:57:55 | 显示全部楼层

Re: 谁可以帮忙写一个流量换算的bash脚本

[quote:401b6d8a5b="itsea"]
[code:1]i=`cat /root/test/indw.txt`
if ["$i" = "Mb/s"]; then
echo $a

echo $b
fi[/code:1][/quote]
这一部分我是用for语句来实现的
[code:1]
for i in $(cat /root/test/indw.txt)
do
if [ "$i"=="Mb/s" ]; then
echo $a
fi
done
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2004-12-27 20:37:24 | 显示全部楼层
VimChina, 结果是一样的,也是有"没有那个文件或目录"的错误提示
why?
那位朋友出来帮忙谢谢,实现到3个流量单位统一换算成Mb/s就ok了
回复

使用道具 举报

发表于 2004-12-27 20:40:25 | 显示全部楼层
可是我的却可以呀
那可能是我没有明白你的意思~~

我的环境是:
Magic Linux 1.2 Beta3
Bash: 3.0
回复

使用道具 举报

 楼主| 发表于 2004-12-27 20:51:41 | 显示全部楼层
我的是redhat9.0
方便的话加下我
MSN:[email protected]
回复

使用道具 举报

发表于 2004-12-27 22:02:38 | 显示全部楼层
“[” 后面和“]”前面都要留空格。
回复

使用道具 举报

 楼主| 发表于 2004-12-27 22:30:13 | 显示全部楼层
原来是这样,可以了,谢谢斑竹,那后面部分怎么实现呢?
如果判断到单位不是Mb/s的话 ,要换算单位除于1024应该表示式是怎么样的?
另外请推荐点bash详细点的初级教程把,我找到的都很短
回复

使用道具 举报

发表于 2004-12-27 22:34:50 | 显示全部楼层
[quote:17219ff0e0="dannycat"]“[” 后面和“]”前面都要留空格。[/quote]恩,这个我忘了指出来了
谢谢dannycat
回复

使用道具 举报

 楼主| 发表于 2004-12-27 22:40:49 | 显示全部楼层
再次感谢二位
我按照你们的提示改了,可是有个问题,无论$i是什么值他都只是会显示yes不会no?
即使我直接把i的值写成了kb/s也是一样?这是为什么?
#!/bin/bash
a='yes'
b='no'
i='kb/s'
if [ "$i"=="Mb/s" ] ; then
echo $a
elif [ "$i"=="kb/s" ] ; then
echo $b
fi
回复

使用道具 举报

发表于 2004-12-27 23:08:59 | 显示全部楼层
[code:1] if [ "$i" = "Mb/s" ]; then [/code:1]

== 是整数运算符。
回复

使用道具 举报

 楼主| 发表于 2004-12-27 23:15:47 | 显示全部楼层
那如果是比较字符串用什么?
回复

使用道具 举报

 楼主| 发表于 2004-12-27 23:52:17 | 显示全部楼层
好象可以了
字符比较是不用""的对吗?
而且只有一个=
写脚本真难 特别是对俺这样的新手...汗
a='1024'
i=`cat /root/test/indw.txt`
if [ $i = Mb/s ] ; then
     echo $a
elif [ $i = kb/s ] ; then
  let "a=$a/1024"
  echo $a
elif [ $i = b/s ] ; then
let "a=$a/1048578"
echo $a
fi
回复

使用道具 举报

 楼主| 发表于 2004-12-27 23:53:42 | 显示全部楼层
只是按照这个脚本只可以换算流量为整数的流量,不可以计算带小数点的,还请高手指点.谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 13:29 , Processed in 0.055156 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表