Shell:变量数值计算(下)

2022-12-28 20:11:07 浏览数 (2)

bc 命令用法

如果没有安装bc,用下面命令进行安装 centos systemctl intall -y bc Unbunt apt-get install -y bc

代码语言:javascript复制
root@cs:/server/scripts# echo 3 5|bc
8
root@cs:/server/scripts# echo 3-5|bc
-2
root@cs:/server/scripts# echo 3.6-5.2|bc
-1.6
root@cs:/server/scripts# echo 3.6*5.2|bc
18.7
root@cs:/server/scripts# echo "scale=2;355/113"|bc
3.14
root@cs:/server/scripts# echo "scale=6;355/113"|bc
3.141592

计算1-10的结果

代码语言:javascript复制
root@cs:/server/scripts# echo `seq -s " " 10`=`seq -s " " 10|bc`
1 2 3 4 5 6 7 8 9 10=55
root@cs:/server/scripts# echo `seq -s " " 10`=$((`seq -s " " 10`))
1 2 3 4 5 6 7 8 9 10=55
root@cs:/server/scripts# echo `seq -s ' ' 10`=$(echo $[`seq -s " " 10`])
1 2 3 4 5 6 7 8 9 10=55

awk实现计算

代码语言:javascript复制
root@cs:/server/scripts# echo "5.3 6.9"|awk '{print ($1 $2)}'
12.2
root@cs:/server/scripts# echo "5.3 6.9"|awk '{print ($1-$2)}'
-1.6
root@cs:/server/scripts# echo "5.3 6.9"|awk '{print ($1*$2)}'
36.57
root@cs:/server/scripts# echo "5.3 6.9"|awk '{print ($1/$2)}'
0.768116

$[]实现运算

代码语言:javascript复制
root@cs:/server/scripts# i=8
root@cs:/server/scripts# i=$[i 6]
root@cs:/server/scripts# echo $i
14
root@cs:/server/scripts# echo $[i-5]
9
root@cs:/server/scripts# echo $[i*5]
70
root@cs:/server/scripts# echo $[i**5]
537824
root@cs:/server/scripts# echo $[i/5]
2
root@cs:/server/scripts# echo $[i%5]
4

基于Shell 变量输入read 命令的运算实践

代码语言:javascript复制
root@cs:/server/scripts# cat test3.sh
#!/bin.bash
read -p "please input two:" a b
echo "a b=$(($a $b))"
echo "a-b=$(($a-$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"
echo "a  :$((a  ))"
echo "a=$a"
echo "  a:$((  a))"
echo "a=$a"
echo "b--:$((--b))"
echo "b=$b"
echo "--b:$((--b))"
echo "b=$b"

执行结果

代码语言:javascript复制
root@cs:/server/scripts# sh test3.sh
please input two:2 2
a b=4
a-b=0
a*b=4
a/b=1
a**b=4
a%b=0
a  :2
a=3
  a:4
a=4
b--:1
b=1
--b:0
b=0

完善的代码

代码语言:javascript复制
root@cs:/server/scripts# cat test3.sh
#!/bin.bash

read -t 15 -p "please input two:" a b
[ ${#a} -le 0 ]&&{
 echo "the first num is null"
exit 1
}
[ ${#b} -le 0 ]&&{
echo "the first num is null"
exit 1
}
expr $a   1 &>/dev/null
REVTAL_A=$?
expr $b   1 &>/dev/null
REVTAL_B=$?
if [ $REVTAL_A -ne 0 -o $REVTAL_B -ne 0 ];then
    echo "one of the num is not num,pls input again."
    exit 1
fi

echo "a b=$(($a $b))"
echo "a-b=$(($a-$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"
echo "a  :$((a  ))"
echo "a=$a"
echo "  a:$((  a))"
echo "a=$a"
echo "b--:$((--b))"
echo "b=$b"
echo "--b:$((--b))"
echo "b=$b"

运算结果

代码语言:javascript复制
root@cs:/server/scripts# sh test3.sh
please input two:12 12
a b=24
a-b=0
a*b=144
a/b=1
a**b=8916100448256
a%b=0
a  :12
a=13
  a:14
a=14
b--:11
b=11
--b:10
b=10

用传参方式进行运算

0 人点赞