Linux-Shell算术运算

张开发
2026/4/8 23:46:17 15 分钟阅读

分享文章

Linux-Shell算术运算
在 Shell 中变量默认都是字符串类型的。要进行算术运算你必须使用特定的语法来告诉 Shell“这里我不是要拼接字符串而是要进行数学计算”。双括号$((...))特点如下只能进行整数运算不支持小数浮点数的运算变量引用无需使用$符号在双括号内部引用变量时可以省略$符号支持常见运算符, -, *, /除法结果为整数 %取余 **幂运算 , --自增自减前置和后置都支持 , |, ^, ~, , 按位与、或、异或、非、左移、右移 , ||, !逻辑与、或、非支持赋值可以在括号内进行赋值操作基本运算示例如下a10 b5 # 加法 echo $((a b)) # 输出 15 # 减法 echo $((a - b)) # 输出 5 # multiplication (乘法用 * 表示避免与通配符混淆) echo $((a * b)) # 输出 50 # 除法结果为整数 echo $((a / b)) # 输出 2 # 取余 echo $((a % b)) # 输出 0 (10 除以 5 余 0) echo $((11 % b)) # 输出 1 (11 除以 5 余 1)自增运算示例count10 echo 原始值: $count # 变量自增 (后置) echo $((count)) # 输出 10 (先输出再加 1) echo 自增后: $count # 输出 11 # 变量自减 (前置) echo $((--count)) # 先减 1再输出 (11-110) echo 自减后: $count # 输出 10赋值运算示例a5 b2 ((a a * b 10)) # 等价于 a$((a * b 10)) echo $a # 输出 20 (5 * 2 10 20)在循环和判断中使用示例# 从 1 加到 10 sum0 for ((i1; i10; i)); do ((sum i)) # ((sum sum i)) 的简写 done echo 1到10的和是: $sum # 输出 55let命令let命令也是shell中的内置命令功能与 $((...)) 非常相似。它主要用于赋值和自增/自减场景。命令的基本语法如下let 表达式表达式中的变量需要 $ 符号并且整个表达式需要用双引号括起来。特点如下同样只支持整数运算。语法稍微繁琐不如 $((...)) 简洁。let 通常用于对变量进行直接赋值。示例如下a10 b5 # 加法需要 let sum a b echo $sum # 输出 15 # 自增 let a echo$a # 输出 11 #复杂的赋值 let square a * a echo $square # 输出 121 (11 * 11)bc命令浮点运算王者上面介绍的方式都只是进行整数运算如果需要进行浮点数运算shell中内置了bc命令可以帮你实现。bc (Basic Calculator) 是你的不二之选。它是一个强大的命令行计算器。整数运算bc的默认行为echo 10 5 | bc # 输出 15浮点数运算要通过 bc 进行浮点运算需要设置 scale 变量来定义小数点位数。# 计算 10 除以 3保留 4 位小数 # echo -e 用于正确解释 \n 字符 echo -e scale4\n10 / 3 | bc # 输出 3.3333如何在脚本中使用bc命令上面的示例中也看到了可以通过管道符传递个bc进行算术运算更好的方式是使用 (Here String) 来将数据传递给 bc避免使用管道符。# 定义 pi 的近似值和半径 pi_value3.14159 radius2.5 # 计算圆的面积并将结果存入变量 area area$(bc scale2;$pi_value * $radius *$radius) echo 圆的面积是: $area # 输出圆的面积是: 19.63直接在脚本中进行浮点数运算是不行的只能借助bc命令。下面是一个很好的示例a1.5 b2.3 c10 # 1. 构造表达式字符串 expr_str$a $b # 2. 使用 bc 计算 a b 的结果 # printf 用于格式化输出并去除多余的空行和0 sum$(printf %.4f\n$(echo scale4; $expr_str | bc)) # 3. 将新的结果与 c 相乘 final_result$(bc scale2; $sum *$c) # 4. 输出最终结果 echo 最终结果是: $final_result # 输出 最终结果是: 38.00 The END

更多文章