⑴ linux Shell编程中常用的数学计算方法:expr,let,bc及其他。哪个效率更高一点
从效率来说let==$(()) > expr > bc,这个是绝对的。
let和$(())运行是内建命令,使用相同的算法。
expr和bc是外部程序,专expr的体积几乎等属于bc的1/3,执行一次装入内存所消耗的时间就不一样。
从运算能力来说,自然bc排第一位。
其实还有awk,能更好的执行基本运算、汇总、求平均等更复杂的。而且还可以使用数组、哈希表。
⑵ linux shell 计算平均值
1班(class1)的平均值:
awk 'BEGIN{sum=0;num=0}{if($2=="class1"){sum+=$3;num+=1}}END{printf "%f\n",sum/num}' c.txt
2班(class2)的平均值:
awk 'BEGIN{sum=0;num=0}{if($2=="class2"){sum+=$3;num+=1}}END{printf "%f\n",sum/num}' c.txt
3班(class3)的平均值:
awk 'BEGIN{sum=0;num=0}{if($2=="class3"){sum+=$3;num+=1}}END{printf "%f\n",sum/num}' c.txt
⑶ linux shell 如何实现浮点运算
linux shell本身只是一个脚本语言,使用操作系统的命令或已安装的程序进行运算。你出的题咋一看有难度,实际上是个伪命题,只要有个已经安装好的支持高精度浮点运算的支持外部调用的计算器程序,写个shell实现这个命题太简单了。如果只是依赖操作系统内置的计算器,那就复杂很多。需要考虑把数字转成文本,进行截断后,再转成数字,分段进行计算,然后再将结果进行组合,最终结果需要以文本方式输出,理论上也可以实现。
⑷ linux shell 怎么计算设备文件的md5
你好:
linux系统下面(ubuntu、redhat等等)有一个命令是MD5sum,你可以使用md5sum + 文件名,就可以算出来的
⑸ linux shell 怎么计算输入的任意个数的和
sum=0
while [ 1 ]
do
read one
if [ one -eq 0 ]
then
exit
fi
sum=`expr $sum +$one `
done
echo $sum
输入0停止输入,任意多个数,需要有一个标识内来表示数据输入结容束
⑹ 用Linux shell 计算两个时间差
start=`date +%s -d "2011-11-28 15:55:37"`
end=`date +%s -d "2011-11-28 15:55:52"`
echo $(($end-$start))
这个前提是你能拿到开始和结束时间字串的基础上的。
如果你的日志文件输出版格式是上述的话,还权有个方法:
cat 日志文件 | awk '/^000/{
start=$2 " " $3
end=$4 " " $5
stm=mktime(gensub(/[:-]/, " ", "g", start))
etm=mktime(gensub(/[:-]/, " ", "g", end))
print $1 " - " etm-stm
}'
⑺ LINUX shell 遇到的问题。 我想计算1+2+3+4.到100
这里
i
是当做计数器用的,每次循环递增1。r
是当做累加器用的,将
i
的值进行累加。
这里没有用for循环,而是用的while循环,其实是一样的,而且while循环更为通用(sh不支持for循环)。
循环的次数也是有定义的,while
[
"$i"
!=
"100"
]这句就是定义,只要
i
没递增到100,就会一直循环。其实这句从语义上来说是不对的,这里是整数的比较而不是字符串的比较,所以比较符应该用-ne而不要用!=,即,应该写成
while
[
$i
-ne
100
]
下面是个更为简单的实现,你可以体会一下(shell中的变量其实不需要初始化,自有其默认值)。
#!/bin/bash
for
i
in
{1..100}
do
r=$((r+i))
done
echo
$r
⑻ 在Linux下,编写 一个Shell程序,计算磁盘上所有目录下平均文件个数
我想问一下,计算的是根目录文件夹还是还是包含目录下各子文件夹?
如果根目录文件夹比较好写,如果加上子目录。数量太大了。我想了一个思路,不过感觉很笨。
你参考一下吧,
1.统计所有的目录整理成一个目录文件
2.依次按照整理的目录文件开始统计各目录下的文件数,整理成一个统计文件
3.读取统计文件数据开始计算,最后整理出一个平均文件个数的日志。
其实这个题不是很难,看看书完全可以自写,就是比较繁琐。而且测试起来太慢了。
因为需要search整个磁盘。实在懒得写。。不好意思。
⑼ linux shell程序设计,输入n,计算1+1/2+1/3+...+1/n。要求调用bc
[oracle@localhost test]$ cat c.sh
#!/bin/sh
b=0
echo "请出入n的值:"
read n
for ((a=1;a<=n;a++))
do
b=1/$a+$b
done
c=`bc<<!
scale=5
$b
!
`
echo "运算式是:$b"
echo "最后的结果是:$c"
[oracle@localhost test]$ sh c.sh
请出入n的值:
20
运算式是:1/20+1/19+1/18+1/17+1/16+1/15+1/14+1/13+1/12+1/11+1/10+1/9+1/8+1/7+1/6+1/5+1/4+1/3+1/2+1/1+0
最后的结果是:3.59768
[oracle@localhost test]$
⑽ linuxshell怎么计算设备文件的md5
计算设备文件来的md5所要用到的命令源就是 md5sum
man一下md5sum命令,得到md5sum命令的用法:
md5sum [OPTION]… [FILE]…
1、计算指定文件的MD5值(如a.rmvb)
md5sum a.rmvb
输出结果类似如下:
a.rmvb
即计算出的md5值加上文件名
测试了一下,发现这命令算一2G多的电影所用时间不过几十钞,效率还行。
2、计算字符串MD5值(如字符串 “password”)
echo -n “password” | md5sum
输出:
–
上面echo加 -n的作用是去除串结尾的回车符,因为echo命令默认会添加一回车符。
像如果是:
echo “password” | md5sum
那输出的将会是:
–
不加-n与加-n结果是不一样的。正确的做法一般是要加-n参数。