bash中的算术运算 – $(()) $[] let expr bc typeset

Shell Liemer_Lius 1061℃ 0评论

基本介绍:

在算术计算中,($(()) $[] let expr bc)这些方法都能实现。多数的方法实现方法类似,有的有一些特殊的功能(如expr);只有bc可以计算浮点数,其他都是整数的运算

bash中默认将所有的变量当做字符串来处理,如下:

# a=2
# b=3
# c=$a+$b
# echo $c
2+3

如果要进行算术运算,有以下四种方法(常用前三种):

方法一:let引导的算术表达式
# let c=$a+$b
# echo $c
5
# let "c=a+b"    // 如果用引号,则直接全部不用加$,直接用变量名称即可进行运算
方法二:$[算术表达式]
# d=$[$a+$b]
# echo $d
5
方法三:$((算术表达式))
# e=$(($a*$b))
# echo $e
6
方法四:用expr命令,算术运算符之间必须要有空格,且要用到命令引用``,$()
# f=$(expr $b - $a) && echo $f
1
# f=`expr $b - $a` && echo $f
1
# f=`expr $b-$a` && echo $f    //不加空格就变成字符串
3-2

expr的特殊用法:
expr有一些自带的方法,关键时候能起到比较方便的作用。
# 计算字符串长度
> echo `expr length "Hello, Lius..."`
14
# 字符串匹配:字符串 : REGEXP
> vim aaa.sh
#!/bin/bash
if expr $1 : ".*\.pub" &> /dev/null; then
    echo Yes
else
    echo No
fi

> bash aaa.sh lius.pub
Yes
> bash aaa.sh lius.sh
No

方法五:bc
# 交互式
 # bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1+2
3

# 管道的形式实现
# echo "1+2*4" |bc
9
# echo "scale=2; 1+2*4/3" |bc
3.66

# 显示小数点前面的0
echo "scale=2; 2.5/20" |bc |awk '{printf "%.2f", $0}'
# 进制转换
# echo "obase=16; 26" |bc
1A
# echo "obase=2; 26" |bc
11010

方法六:typeset,很少用
# typeset -i A=3 B=2 C
# C=A+B
# echo $C
5

在判断条件中,目前还没有遇到let的用武之地:

判断条件:
# if test $[$a+$b] -eq 5; then echo "Yes"; else echo "No"; fi
Yes
# if test `expr $a + $b` -eq 5; then echo "Yes"; else echo "No"; fi
Yes

转载请注明:liutianfeng.com » bash中的算术运算 – $(()) $[] let expr bc typeset

喜欢 (1)

发表回复