外部过滤器,程序和命令--数学计算命令

操作”数字”

factor

  将一个正数分解为多个素数.

bash$ factor 2345
2345: 5 7 67

bc

  bc命令是一种支持任意精度的交互执行的计算器语言. bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下.

  bc比较类似于C语言的语法.

  这里有一个简单的使用bc命令的模版, 可以用来计算脚本中的变量. 这个模版经常用于命令替换中.

variable=$(echo "OPTIONS; OPERATIONS" | bc)

语法:

bc (选项)(参数)

选项:

-i:强制进入交互式模式;
-l:定义使用的标准数学库;
-w:对POSIX bc的扩展给出警告信息; 
-q:不打印正常的GNU bc环境信息; 
-v:显示指令版本信息;
-h:显示指令的帮助信息.

参数:
  文件:指定包含计算任务的文件.

实例:
  算术操作高级运算bc命令它可以执行浮点运算和一些高级函数:

echo "1.212*3" | bc
3.636

  设置小数精度(数值范围).

echo "scale=2; 3/8" | bc        # 参数"scale=2"是将bc输出结果的小数位设置为2位.
.37

  ! “scale”制定了有效数字的个数.

  进制转换.

#!/bin/bash 

abc=100 
a=1100100
echo "obase=2;$abc" | bc
# 执行结果为:1100100,这是用bc将十进制转换成二进制.

echo "obase=10;ibase=2;$a" | bc
# 执行结果为:100,这是bc将二进制转换为十进制.

exit 0

  计算平方和平方根.

echo "10^10" | bc               # 10000000000
echo "sqrt(100)" | bc           # 10
echo "sqrt(10)" | bc            # 3
echo "scale=3;sqrt(10)" |bc     # 3.162

  调用bc的另一种方法就是here document, 并把它嵌入到命令替换块中. 当一个脚本需要将一个选项列表和多个命令传递到bc中时, 这种方法就显得非常合适了.

variable=`bc << LIMIT_STRING
options
statements
operations
LIMIT_STRING
`

...or...

variable=$(bc << LIMIT_STRING
options
statements
operations
LIMIT_STRING
)

例:使用”here document”来调用bc.

#!/bin/bash
# 使用命令替换来调用'bc'
# 并与'here document'相结合.

var1=`bc << EOF
18.33 * 19.78
EOF
`
echo $var1             # 362.56

# 使用 $(...)这种标记法也可以.
v1=23.53
v2=17.881
v3=83.501
v4=171.63

var2=$(bc << EOF
scale=4
a=( $v1 + $v2 )
b=( $v3 * $v4 )
a * b + 15.35
EOF
)
echo $var2

var3=$(bc -l <<EOF
scale=9
s ( 1.7 )
EOF
)
# 返回弧度为1.7的正弦.
# "-l"选项将会调用'bc'算术库.
echo $var3         # .991664810

hyp=                # 声明全局变量.
#hypotenuse ()      # 计算直角三角形的斜边.
#{
#   hyp=$(bc -l << EOF             # 不能缩进,会产生错误.
#   scale=9     
#   sqrt ( $1 * $1 + $2 * $2 )
#   EOF
#   )
#}
hypotenuse ()       # 计算直角三角形的斜边.
{
hyp=$(bc -l << EOF
scale=9     
sqrt ( $1 * $1 + $2 * $2 )
EOF
)
}

hypotenuse 3.68 7.31
echo "hypotenuse = $hyp"       # 8.184039344

exit 0

dc

  dc(桌面计算器desk calculator)工具是面向栈的, 并且使用RPN(逆波兰表达式”Reverse PolishNotation”又叫”后缀表达式”). 与bc命令很相似, 但是这个工具具备好多只有编程语言才具备的能力.

(
        正常表达式      后缀表达式(逆波兰表达式)
         a+b             a,b,+
         a+(b-c)         a,b,c,-,+
         a+(b-c)*d       a,d,b,c,-,*,+
)

  绝大多数人都避免使用这个工具, 因为它需要非直观的RPN(逆波兰)输入, 但是, 它却有特定的用途.

bash$ echo "16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D68736142snlbxq" | dc
Bash
bash$ 

awk

  在脚本中使用浮点运算的另一种方法是使用awk内建的数学运算函数, 可以用在shell包装中.

  例: 计算直角三角形的斜边:

#!/bin/bash
# hypotenuse.sh: 返回直角三角形的斜边.

ARGS=2                  # 需要将两个直角边作为参数传递进来.
E_BADARGS=65            # 错误的参数值.

if [ $# -ne "$ARGS" ]   # 测试传递到脚本中的参数值.
then
    echo "Usage: `basename $0` side_1 side_2"
    exit $E_BADARGS
fi

AWKSCRIPT=' { printf( "%3.7f\n", sqrt($1*$1 + $2*$2) ) } ' 
#               命令 / 传递给awk的参数.

# 将参数通过管道传递给awk.
echo -n "Hypotenuse of $1 and $2 = "
echo $1 $2 | awk "$AWKSCRIPT"

exit 0

运行;

bash$ ./hypotenuse.sh 3 4
Hypotenuse 3 and 4 = 5.0000000
bash$ 



awk详细用法点我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值