声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章
感谢泷羽sec 团队的教学
视频地址:shell (3)脚本参数传递与数学运算_哔哩哔哩_bilibili
本文主要讲脚本参数传递的实现与数学运算。
一、向脚本程序传递参数的实现
1. 创建脚本文件
创建一个名为 s.sh
的脚本文件,并写入以下内容:
#!/bin/bash
echo "执行的文件名是: $0"
echo "第一个参数是: $1"
echo "传递的参数作为一个字符串显示: $*"
echo "传递的参数独立作为每个字符串显示: $@"
echo "传递到脚本的参数个数是: $#"
echo "最后命令的退出状态: $?"
echo "脚本运行的当前进程ID是: $$"
保存并退出编辑器。
2. 给脚本添加执行权限
执行以下命令,给脚本文件添加可执行权限:
chmod +x s.sh
3. 执行脚本并传递参数
运行脚本时,可以在命令后面添加参数,例如:
./s.sh 参数1 参数2 参数3
4. 脚本内容解释
以下是脚本中各参数变量的解释:
$0
:表示当前脚本的文件名或执行路径。$1
、$2
...:表示传递给脚本的第一个、第二个……参数。$*
:表示传递给脚本的所有参数,作为一个字符串显示,参数之间以空格分隔。$@
:表示传递给脚本的所有参数,每个参数独立显示,保持独立性。$#
:表示传递给脚本的参数个数。$?
:表示上一个命令的退出状态。0
表示成功,非0
表示失败。$$
:表示当前脚本运行的进程 ID。
5. 执行示例
假设执行以下命令:
./s.sh hello world tom
脚本输出如下:
执行的文件名是: ./s.sh
第一个参数是: hello
传递的参数作为一个字符串显示: hello world tom
传递的参数独立作为每个字符串显示: hello world tom
传递到脚本的参数个数是: 3
最后命令的退出状态: 0
脚本运行的当前进程ID是: 40752
二、Shell 编程中进行数学运算
1. 使用 expr
expr
是一个外部命令,用于执行基本的整数运算。
语法
expr 表达式
注意
- 运算符之间必须有空格。
- 乘法符号
*
必须加反斜杠\
以防止被 Shell 解释为通配符。 - 只支持整数运算,不支持浮点运算。如果需要浮点运算,可以改用
bc
或awk
。
示例
a=10 b=3
# 加法
result=$(expr $a + $b)
echo "a + b = $result"
# 乘法
result=$(expr $a \* $b)
echo "a * b = $result"
# 除法
result=$(expr $a / $b)
echo "a / b = $result"
# 取余
result=$(expr $a % $b)
echo "a % b = $result"
result=$(expr $a + $b)
# expr 是一个外部命令,用于执行整数运算。
# $(...) 用于捕获命令的输出,将其赋值给变量 result。
# expr $a + $b 表示对变量 a 和 b 的值进行加法运算。
2. 使用 $(( ))
$(( ))
是 Shell 的内置运算符,支持基本的整数数学运算,推荐使用。
语法
$(( 表达式 ))
特性
- 支持更简洁的语法。
- 不需要调用外部命令,效率更高。
示例
a=10 b=3
# 加法
result=$((a + b))
echo "a + b = $result"
# 减法
result=$((a - b))
echo "a - b = $result"
# 乘法
result=$((a * b))
echo "a * b = $result"
# 除法
result=$((a / b))
echo "a / b = $result"
# 自增和自减
((a++))
echo "a 自增 = $a"
((b--))
echo "b 自减 = $b"
3. 使用 let
let
是 Bash 的内置命令,专门用于整数运算。
语法
let 变量=表达式
特性
- 运算方式类似
$(( ))
,语法稍微不同。
示例
a=10 b=3
# 加法
let result=a+b
echo "a + b = $result"
# 减法
let result=a-b
echo "a - b = $result"
# 乘法
let result=a*b
echo "a * b = $result"
# 除法
let result=a/b
echo "a / b = $result"
# 取余
let result=a%b
echo "a % b = $result"
# 自增
let a++
echo "a 自增 = $a"
# 自减
let b--
echo "b 自减 = $b"
4. 使用 bc
进行浮点运算
bc
是 Shell 外部工具,支持浮点数计算,适合复杂数学运算。
语法
echo "表达式" | bc
# kali 使用 apt install -y bc 进行安装
特性
- 支持浮点运算。
- 可以设置小数位数 (
scale
)。 - 支持科学计算,如幂运算、对数、平方根等。
示例
a=10.5 b=3.2
# 加法 result=$(echo "$a + $b" | bc)
echo "a + b = $result"
# 乘法 result=$(echo "$a * $b" | bc)
echo "a * b = $result"
# 除法,保留两位小数
result=$(echo "scale=2; $a / $b" | bc)
echo "a / b = $result"
# 求平方 r
esult=$(echo "$a^2" | bc)
echo "$a 的平方 = $result"
5. 使用 awk
awk
是一个强大的文本处理工具,同时也支持数学运算,适合进行复杂处理。
语法
awk "BEGIN {print 表达式}"
特性
- 支持整数和浮点数运算。
- 灵活且功能强大。
示例
a=10 b=3
# 加法
result=$(awk "BEGIN {print $a + $b}")
echo "a + b = $result"
# 浮点运算
result=$(awk "BEGIN {print $a / $b}")
echo "a / b = $result"
# 求幂
result=$(awk "BEGIN {print $a ^ $b}")
echo "$a 的 $b 次幂 = $result"
6. 各种运算对比
方法 | 支持整数 | 支持浮点 | 特点 | 优点 | 缺点 |
---|---|---|---|---|---|
expr | ✅ | ❌ | 外部命令,基本整数运算 | 简单,适合基本整数运算 | 不支持浮点,语法较繁琐 |
$(( )) | ✅ | ❌ | Shell 内置,基本整数运算 | 简单高效,推荐使用 | 不支持浮点运算 |
let | ✅ | ❌ | Bash 内置,整数运算 | 语法接近 $(( )) ,操作简便 | 不支持浮点运算 |
bc | ✅ | ✅ | 外部命令,支持浮点数和高级运算 | 浮点运算和复杂计算功能强大 | 性能略低,需调用外部命令 |
awk | ✅ | ✅ | 外部工具,适合文本处理和运算 | 灵活,可处理多种复杂场景 | 性能较低,需调用外部工具 |