shell脚本(3)

声明:学习视频来自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 解释为通配符。
  • 只支持整数运算,不支持浮点运算。如果需要浮点运算,可以改用 bcawk
示例
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 内置,基本整数运算简单高效,推荐使用不支持浮点运算
letBash 内置,整数运算语法接近 $(( )),操作简便不支持浮点运算
bc外部命令,支持浮点数和高级运算浮点运算和复杂计算功能强大性能略低,需调用外部命令
awk外部工具,适合文本处理和运算灵活,可处理多种复杂场景性能较低,需调用外部工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茶颜悦色vv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值