1、bc中的scale
echo "scale=0;13 * 0.6 "|bc
echo "scale=0;13 * 0.6 / 1"|bc -l
Jared Liu: bc做乘法是不受scale变量影响的,想解决这个问题就是第二种trick吧
2、bc的小数运算和四舍五入
echo "scale=2;2/3"|bc
awk BEGIN'{printf "%.2f\n", 2/3}'
awk BEGIN'{printf "%.0f\n", 2/3}'
Jared Liu: bc计算出来的结果小于1的时候(>0),整数部分会为空,而awk在制定float的条件下会自动四舍五入;另外如想想用bc,那么要自己写两行awk来模拟四舍五入的行为了,稍猥琐。。。。
3、正反通吃
cat的姐妹tac,写法是横向反向的,功能也是;还有一个孪生兄弟rev,纵向也反向了
Jared Liu: cat够用了
4、sed的bug?
sed -n '1,0p' filename
sed -n '1,1p' filename
Jared Liu: 结果都是返回一行
5、expr不能算乘法?
expr 5 * 5
expr: syntax error
Ray: 在shell中*是通配符,具有特殊意义,对于*的使用要进行转义,否则在解释的时候将*进行通配替换
解决:
expr 5 \* 5
echo $((5*5))
echo "5*5"|bc
6、rm -f的返回值
rm -f a.txt && echo OK,即使a.txt不存在也会echo OK
7、可以不使用管道时,减少管道的使用
cat someweb|grep "href"和grep "href" someweb
后者效率会好50%左右
8、尽量使用重定向,不用cat
如果对所有的脚本进行一下统计,那么使用的最多的几个命令当中,肯定有cat。
如果你关心脚本的效率,那就尽早放弃cat。(下面的数据可能会更有说服力)
而实际上,cat能完成的功能,基本都可以用重定向来完成。
例如:
cat file|while read x
do
((line++))
done
推荐采用重定向完成:
(这同时也解决了父shell进程和子shell进程数据共享的问题)
while read x
do
((line++))
done < file
第二种写法能提高效率90%左右
9、尽量使用内置命令,而不用同样功能的系统命令
对于内置命令,(可以通过man builtin查看),在执行的时候是不会产生子shell进程的。因此其执行速度会远远的高于系统命令。
例如:echo是一个bash内置的命令。当然,也存在和其功能相同的一个系统命令,名字也叫echo,在/bin/echo。这两个的性能差距是很大的。后者效率比前者低90%左右。
文章评论(0条评论)
登录后参与讨论