Shell脚本笔记(三)shell中的数学计算

shell中的数学计算

一、使用方括号

#!/bin/bash
a=10
b=29
c=88

res=$[$a * ($c-$b)]
echo $res

二、使用(())

echo $((1+9))
((i=1+2))
b=$((9-2*2))

echo $((a+=1))
echo $((a**2)) #计算a的平方
echo $((8<9)) #输出1
echo $((i++)) 
echo $((RANDOM%61)) #产生一个不大于60的随机数

三、bc的用法

bc技术器实际上是一种编程语言,它可以识别:

数字(整数和浮点数)
变量(简单变量和数组)
注释(以#C语言中的/* */开始的行)
表达式
编程语句(例如if-then语句)
函数

浮点运算是由内建变量scale控制的。必须将这个值设置为你希望在计算结果中保留的小数
位数,否则无法得到期望的结果。

$ bc -q
3.44 / 5
0
scale=4
3.44 / 5
.6880
quit
$

bc还能支持变量:

$ bc -q
var1=10
var1 * 4
40
var2 = var1 / 5
print var2
2
quit
$

脚本中使用bc:

方式一:

variable=$(echo "options; expression" | bc)

实例:

#!/bin/bash
var1=$(echo "scale=4; 3.44 / 5" | bc)
echo The answer is $var1

方式二,使用内联输入,格式:

variable=$(bc << EOF
options
statements
expressions
EOF
)

var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc << EOF
scale = 4
a1 = ( $var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
)

 三、Shell中产生随机数的方法

1)通过系统变量RANDOM

#范围:0~3267,因此用于加密时加密性不太好
echo $RANDOM 

2)通过openssl产生随机字符串

openssl rand -base64 8

3)通过date产生

date +%s%N

4)通过/dev/urandom配合chksum

head /dev/urandom|cksum

四、常见用法

expr $a + 1 &> /dev/null #判断是否为数字的方法
RA=$?
expr $b + 2 &> /dev/null
RB=$?
if [ $RA -ne 0 -o $RB -ne 0 ];then
    echo 'one of the input is not num!!!!'
    exit 1
fi
Simple is important!
原文地址:https://www.cnblogs.com/Shadowplay/p/8310290.html