在 Shell 脚本编程中,运算符是我们进行数据处理、判断条件、实现逻辑控制的基础。特别是算术运算符,几乎每个脚本都会用到它们来完成数字计算。
本篇文章将带你全面认识 Shell 中常用的算术运算符,讲解它们的用法、示例及注意点,帮助你轻松掌握 Shell 的算术运算
目录
- 什么是算术运算符
- Shell 支持的算术运算符
- let、(( )) 和 $(( )) 用法和区别
- 算术运算符的使用方式
- 常用算术运算符详解
- 结合实例演示算术运算
- 总结
1. 什么是算术运算符?
算术运算符是对数字进行计算的符号或符号组合,比如加法+
、减法-
、乘法*
等。它们用来实现加减乘除、求余、变量自增等基本运算。
在 Shell 脚本中,我们经常需要对变量进行算术操作,例如统计、计数、判断等,算术运算符就是完成这些工作的工具。常用的算术运算符可以与 let
、(( ))
或 $(( ))
结构一起使用。
2. Shell 支持的算术运算符
常见的算术运算符有:
运算符 | 作用 | 说明 |
---|---|---|
+ | 加法 | 两数相加 |
- | 减法 | 两数相减 |
* | 乘法 | 两数相乘 |
/ | 除法 | 两数相除,结果为整数(取整) |
% | 取余 | 两数相除的余数 |
++ | 自增 | 变量值加1 |
-- | 自减 | 变量值减1 |
3. let、(( )) 和 $(( )) 用法和区别
特性/命令 | let | $(( )) | (( )) |
---|---|---|---|
主要用途 | 执行算术运算并赋值 | 执行算术运算并返回结果 | 执行算术运算及条件判断 |
是否需要引号 | 表达式有空格时需要 | 不需要 | 不需要 |
是否自动解析变量 | 是 | 否(变量不需加 $) | 否(变量不需加 $) |
直接输出结果 | 不支持 | 支持 | 不支持 |
常见用法 | 单独赋值或修改变量 | 获取计算结果或嵌入其他命令 | 用于条件判断和循环 |
4. 算术运算符的使用方式
Shell 中执行算术运算主要有以下几种常见方法:
方法一:使用 let
命令
let result=3+5
echo $result
let
用于执行算术表达式,适合简单的计算。
方法二:使用双括号 (( ))
(( result = 3 + 5 ))
echo $result # 输出 8
# 也可以直接打印
echo $((3 + 5))
(( ))
是 Shell 中的算术扩展,功能强大且书写简洁,是推荐使用的算术计算方式。
方法三:使用 expr
命令
result=$(expr 3 + 5)
echo $result # 输出 8
expr
是一个外部命令,支持基本算术运算,但需要注意运算符和参数间要有空格。
5. 常用算术运算符详解
下面详细讲解每个算术运算符的用法及示例。
5.1 加法(+
)
作用:两个数相加。
a=10
b=5
sum=$((a + b))
echo "加法结果:$sum"
5.2 减法(-
)
作用:两个数相减。
a=10
b=5
diff=$((a - b))
echo "减法结果:$diff" # 输出:5
5.3 乘法(*
)
作用:两个数相乘。
a=10
b=5
prod=$((a * b))
echo "乘法结果:$prod"
注意: *
在命令行中是通配符,需要用双括号或转义。
5.4 除法(/
)
作用:两个数相除,结果取整数(向下取整)。
a=10
b=3
quot=$((a / b))
echo "除法结果:$quot"
5.5 取余(%
)
作用:求两个数相除的余数。
a=10
b=3
mod=$((a % b))
echo "取余结果:$mod"
5.6 自增(++
)
作用:变量的值加1。
a=5
((a++))
echo "自增后:$a"
5.7 自减(--
)
作用:变量的值减1。
a=5
((a--))
echo "自减后:$a"
6. 算术运算脚本示例
下面用一个简单示例,结合多个算术运算符计算并输出结果。
#!/bin/bash
echo "=== 使用 let ==="
a=10
b=3
# 加法
let "add = a + b"
echo "let: a + b = $add"
# 减法
let "sub = a - b"
echo "let: a - b = $sub"
# 乘法
let "mul = a * b"
echo "let: a * b = $mul"
# 除法(整数)
let "div = a / b"
echo "let: a / b = $div"
# 取余
let "mod = a % b"
echo "let: a % b = $mod"
# 自增
let "a++"
echo "let: a++ => a = $a"
# 自减
let "b--"
echo "let: b-- => b = $b"
echo -e "\n=== 使用 (( )) ==="
x=8
y=3
# 加法
((x_add = x + y))
echo "(( )): x + y = $x_add"
# 减法
((x_sub = x - y))
echo "(( )): x - y = $x_sub"
# 乘法
((x_mul = x * y))
echo "(( )): x * y = $x_mul"
# 除法
((x_div = x / y))
echo "(( )): x / y = $x_div"
# 取余
((x_mod = x % y))
echo "(( )): x % y = $x_mod"
# 自增
((x++))
echo "(( )): x++ => x = $x"
# 自减
((y--))
echo "(( )): y-- => y = $y"
echo -e "\n=== 使用 \$(( )) ==="
m=7
n=2
# 加法
add_result=$((m + n))
echo "\$(( )): m + n = $add_result"
# 减法
sub_result=$((m - n))
echo "\$(( )): m - n = $sub_result"
# 乘法
mul_result=$((m * n))
echo "\$(( )): m * n = $mul_result"
# 除法
div_result=$((m / n))
echo "\$(( )): m / n = $div_result"
# 取余
mod_result=$((m % n))
echo "\$(( )): m % n = $mod_result"
# 自增
m=$((m + 1)) # 或者使用 ((m++))
echo "\$(( )): m++ => m = $m"
# 自减
n=$((n - 1)) # 或者使用 ((n--))
echo "\$(( )): n-- => n = $n"
echo -e "\n=== 输入测试 ==="
read -p "请输入一个数字,我将为你计算它的平方和立方:" input_num
square=$((input_num ** 2))
cube=$((input_num ** 3))
echo "你输入的数字是:$input_num"
echo "它的平方是:$square"
echo "它的立方是:$cube"
echo -e "脚本执行完毕。"
练习完这个脚本以后,来,结合上一篇文章
read
键盘读取输入,把a、b、x、y、m、n
换成参数。
7. 总结
- Shell 中算术运算符非常丰富,包括加减乘除、取余、自增自减等。
- 推荐使用
(( ))
结构来做算术运算,语法简洁且效率高。 - 除法结果为整数,切记 Shell 不支持浮点运算(可用
bc
、awk
工具实现浮点计算)。 - 记得运算符和变量使用时,避免通配符影响,比如乘号
*
常用双括号包裹。
还有几种运算,一般情况下,也用不到,可以作为了解
幂运算(**)
、左移(<<)
和右移(>>)