shell学习系列之数学运算

本文参考文章:1)https://blog.csdn.net/taiyang1987912/article/details/38893381;
2)https://blog.csdn.net/hansel/article/details/8736775?utm_source=app


数学运算的4种方式

1.使用 expr 外部程式

r=`expr 4 + 5`
echo $r

注意!!! ‘4’ ‘+’ ‘5’ 这三者之间要有空白

r=`expr 4 \* 5` #*之前要加转义,否则错误

乘法: r=`expr 4 * 5`,注意*前要加\转义字符
除法:r=`expr 40 / 5` # 这里不需要转义

2.使用 $(( ))

整数扩展。这种扩展计算是整数型的计算,不支持浮点型。

r=$(( 4 + 5 ))    # 括号中加不加空格,都可以
echo $r

乘法:r=$(( 4 * 5 ))

除法:r=$(( 40 / 5 ))

另外还有以下用法

  • 只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,输出结果全都自动转化成了十进制。如:echo
    $((16#5f)) 结果为95 (16进位转十进制)。
  • 单纯用 (( )) 也可重定义变量值,比如 a=5; ((a++)) 可将 $a 重定义为6
  • 常用于算术运算比较,双括号中的变量可以不使用 符 号 前 缀 。 括 号 内 支 持 多 个 表 达 式 用 逗 号 分 开 。 只 要 括 号 中 的 表 达 式 符 合 C 语 言 运 算 规 则 , 比 如 可 以 直 接 使 用 f o r ( ( i = 0 ; i < 5 ; i + + ) ) , 如 果 不 使 用 双 括 号 , 则 为 f o r i i n ‘ s e q 04 ‘ 或 者 f o r i i n 0..4 。 再 如 可 以 直 接 使 用 i f ( ( 符号前缀。括号内支持多个表达式用逗号分开。 只要括号中的表达式符合C语言运算规则,比如可以直接使用for((i=0;i<5;i++)), 如果不使用双括号, 则为for i in `seq 0 4`或者for i in {0..4}。再如可以直接使用if (( C,使for((i=0;i<5;i++)),使,foriinseq04foriin0..4使if((i<5)), 如果不使用双括号, 则为if [ $i
    -lt 5 ]。

3.使用 $[ ]

r=$[ 4 + 5 ]     # []中加不加空格,都可以
echo $r

乘法:r=$[ 4 * 5 ]

除法:r=$[ 40 / 5 ]

余数:r=$[ 100 % 43 ]

4.使用let 命令

let expressions 执行一个或多个表达式。变量和运算符之间不能有空格,否则要用引号括起。表达式中的变量前不必有$。

加法:

n=10
let n=n+1
echo $n   #n=11

乘法:

let m=n*10
echo $m

除法:

let r=m/10
echo $r

求余数:

let r=m%7
echo $r

乘幂:

let r=m**2
echo $r

注意

虽然Bash shell 有四种算术运算方法,但并不是每一种都是跨平台的,建议使用expr。
另外,我们在 script 中经常有加1操作,以下四种方法都可以:

m=$[ m + 1]
m=`expr $m + 1`
m=$(($m + 1))   # 这里的m也可以不加$
let m=m+1      # 注意这里的m变量前不需要加$

数学运算符

算术运算符

使用let命令来执行算术运算,除法和取余运算过程中要注意除数不能为0。
其中算术运算符有以下几种:
在这里插入图片描述
算术运算符与赋值运算符"="联用,称为算术复合赋值运算符。
在这里插入图片描述

位运算符

用于整数间的运算,按位与运算只有两个二进制都为1,结果才为1;按位或运算只要有一个二进制位为1,则结果为1;按位异或运算两个二进制位数相同时,结果为0,否则为1。按位取反运算符将二进制中的0修改成1,1修改成0。
在这里插入图片描述
位运算符同样可以同赋值运算符联用,组成复合赋值运算符。
在这里插入图片描述

自增自减运算符

自增自减运算符包括前置自增、前置自减、后置自增和后置自减。自增自减操作符的操作元只能是变量,不能是常数或表达式,且该变量值必须为整数型。
#!/bin/sh

 num1=5
 
 let "a=5+(++num1) "
 echo "a=$a"
 
 num2=5
 
 let  "b=5+(num2++) "
 echo "b=$b"

数字常量

   Shell脚本或命令默认将数字以十进制的方式进行处理,当使用0作为前缀时表示八进制,当使用0x进行标记时表示十六进制,同时还可使用num#这种形式标记进制数。
#!/bin/sh
 
let "num1=40"
echo "num1=$num1"    # num1=40
 
let "num2=040"
echo "num2=$num2"    # num2=32
 
let "num3=0x40"
echo "num3=$num3"    # num3=64

使用num#实例:

#!/bin/sh
 
let "num1=2#1101100110001101"
echo "num1=$num1"    # num1=55693
 
let "num2=8#50"
echo "num2=$num2"    # num2=40
 
let "num3=16#50"
echo "num3=$num3"    # num3=80

bash数学运算

(1)expr命令

expr一般用于整数值计算和字符串的操作。其操作符名称如下表所示。
在这里插入图片描述
注:若expr的操作符是元字符(不是普通字符),需要用转义符将操作符的特殊含义屏蔽,进行数学运算,如expr 2014 * 2。expr操作符的两端必须有空格,否则不会执行数学运算expr 5-1,得到结果5-1;而expr 5 - 1,得到结果4。

(2)bc运算器

bc是一种内建的运算器,是bash shell中最常用的浮点数运算工具,包括整型数和浮点数、数组变量、表达式、复杂程序结构和函数。

bc运算器支持的数学运算符号如下表:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/daisy2001daisy/article/details/106312292