# 学习视频笔记均来自B站UP主" 泷羽sec",如涉及侵权马上删除文章
仅用于学习参考,不要越过法律红线
一:向脚本程序传递参数的实现
(1)创建脚本文件
创建一个名为 s.sh 的脚本文件,并写入以下内容:
#!/bin/bash
echo "执行的文件名是: $0"
echo "第一个参数是: $1"
echo "传递的参数作为一个字符串显示: $*"
echo "传递的参数独立作为每个字符串显示: $@"
echo "传递到脚本的参数个数是: $#"
echo "最后命令的退出状态: $?"
echo "脚本运行的当前进程ID是: $$"
保存并退出编辑器。
先ESC,然后:wq! 即可完成
(2). 给脚本添加执行权限
chmod +x s.sh
(3). 执行脚本并传递参数
./s.sh 参数1 参数2 参数3
二、Shell 编程中进行数学运算
(1)使用expr
运算符之间必须有空格。
乘法符号 * 必须加反斜杠 \ 以防止被 Shell 解释为通配符。
只支持整数运算,不支持浮点运算。如果需要浮点运算,可以改用 bc 或 awk。
a=8 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). 使用 $(( ))
语法
$(( 表达式 ))
支持更简洁的语法。 不需要调用外部命令,效率更高。
a=18 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 变量=表达式(运算方式类似 $(( )),语法稍微不同。)
a=15 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 进行浮点运算
echo "表达式" | 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
result=$(echo "$a^2" | bc)
echo "$a 的平方 = $result"
5. 使用 awk
awk "BEGIN {print 表达式}"
支持整数和浮点数运算。 灵活且功能强大。
a=12 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"
各自区别
expr 、$(()) 、let本身自带,性能高,但是不支持浮点型
bc 、 awk 外部命令,支持浮点型,但是性能略低