声明:
本文的学习内容来源于B站up主“泷羽sec”视频【shell (3)脚本参数传递与数学运算】的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题,请联系本人,我将立即删除相关内容。
本文旨在帮助网络安全爱好者提升自身安全技能,并严格遵守国家法律法规。任何人利用本文中的信息从事违法活动,均与本文作者和“泷羽sec”无关。请读者自觉遵纪守法,合理合法使用相关知识。
Shell 脚本作为 Linux 系统中的重要工具,不仅可以用来处理文件和控制流程,还可以进行各种数据运算。本文将详细介绍 Shell 中的数据运算方法,包括整数运算、浮点数运算、字符串运算等,以及如何选择最适合的工具实现高效运算。
1 数据运算分类
Shell 中常见的数据运算分为以下几类:
- 整数运算:加减乘除、取余等基本操作。
- 浮点数运算:需要借助外部工具如
bc
或awk
。 - 字符串运算:长度计算、子串提取、模式匹配等。
- 逻辑运算:逻辑与、逻辑或、非等。
2 整数运算
Shell 自带 $(( ))
和 expr
两种方式处理整数运算。
使用 $(( ))
:
a=10
b=3
# 加法
sum=$((a + b))
echo "Sum: $sum"
# 乘法
product=$((a * b))
echo "Product: $product"
# 除法
quotient=$((a / b))
echo "Quotient: $quotient"
# 取余
remainder=$((a % b))
echo "Remainder: $remainder"
使用 expr
:
# 加法
sum=$(expr 10 + 3)
echo "Sum: $sum"
# 乘法 (需要转义 '*')
product=$(expr 10 \* 3)
echo "Product: $product"
优劣比较:
$(( ))
语法更直观,推荐使用。expr
适合在 POSIX 兼容的环境中使用。
3 浮点数运算
Shell 本身不支持浮点数运算,需借助工具如 bc
或 awk
。
使用 bc
:
a=10.5
b=3.2
# 加法
sum=$(echo "$a + $b" | bc)
echo "Sum: $sum"
# 除法(保留两位小数)
quotient=$(echo "scale=2; $a / $b" | bc)
echo "Quotient: $quotient"
使用 awk
:
a=10.5
b=3.2
# 加法
sum=$(awk "BEGIN {print $a + $b}")
echo "Sum: $sum"
# 乘法
product=$(awk "BEGIN {print $a * $b}")
echo "Product: $product"
优劣比较:
bc
:语法简单,适合复杂运算。awk
:功能强大,可同时处理数据运算和文件解析。
4 字符串运算
字符串的基本操作包括长度计算、子串提取和模式匹配。
计算长度:
str="hello world"
length=${#str}
echo "Length of string: $length"
提取子串:
# 提取从第7个字符开始的5个字符
substr=${str:6:5}
echo "Substring: $substr"
查找子串位置:
# 查找字符 'o' 第一次出现的位置
position=$(expr index "$str" "o")
echo "First occurrence of 'o': $position"
5 逻辑运算
Shell 支持基本的逻辑运算,包括与、或和非。
示例:
a=10
b=20
if [ $a -lt $b ] && [ $a -gt 5 ]; then
echo "$a is less than $b and greater than 5"
fi
if [ $a -eq 10 ] || [ $b -eq 15 ]; then
echo "Either a equals 10 or b equals 15"
fi
逻辑运算符:
&&
:逻辑与||
:逻辑或!
:逻辑非
6 比较运算
运算符 | 含义 | 示例 |
---|---|---|
-lt | 小于(less than) | [ $a -lt $b ] |
-le | 小于等于(less or equal) | [ $a -le $b ] |
-gt | 大于(greater than) | [ $a -gt $b ] |
-ge | 大于等于(greater or equal) | [ $a -ge $b ] |
-eq | 等于(equal) | [ $a -eq $b ] |
-ne | 不等于(not equal) | [ $a -ne $b ] |
7 选择合适的工具
根据需求选择数据运算工具:
- 简单整数运算:推荐
$(( ))
,简单高效。 - 浮点数运算:推荐
bc
,支持高精度计算。 - 数据处理与运算结合:推荐
awk
,灵活强大。 - 跨平台兼容性:使用
expr
,确保 POSIX 环境下可运行。