当前位置: 首页 > article >正文

shell编程3,参数传递+算术运算

声明!
学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页B站泷羽sec

shell编程3,参数传递+算术运算

参数传递

脚本程序传递参数如何实现
创建一个a.sh,内容如下如下

echo 执行的文件名是:$0
echo 第一个参数是:$1
echo 传递的参数作为一个字符串显示:$*
echo 传递的参数独立作为每个字符串显示:$@
echo 传递到脚本的参数个数是:$#
echo 最后命令的退出状态:$?
echo 脚本运行的当前进程ID是:$$
  • $0:这个变量包含了当前执行脚本的名称。如果脚本是通过完整路径调用的,它将包含整个路径。
  • $1, $2, ...:分别表示传递给脚本的第一个、第二个等参数。可以一直递增到脚本接收到的最后一个参数。
  • $*:当未被双引号包围时,$*"$@"的行为相同,都是将所有位置参数视为一个字符串。但当它们被双引号包围时,"$*"会将所有参数视为单个以首个字符为分隔符(通常是空格)连接起来的字符串,而"$@"则会保持每个参数独立。
  • $@:与$*类似,但在被双引号包围时,它将每个参数都作为独立的字符串处理。
  • $#:表示传递给脚本或函数的参数数量。
  • $?:存储最近一次执行的前台管道的退出状态。通常,0 表示成功,非零值表示错误。
  • $$:表示当前shell进程的PID(进程ID)。

更多的Shell特殊变量
除了上述变量之外,还有其他一些有用的特殊变量:

  • $_:这是上一个命令执行的最后一个参数。这在交互式shell中特别有用。
  • $!:最近一个后台进程中运行的作业的PID。
  • $-:显示当前shell选项设置的状态。
  • $IFS(Internal Field Separator):定义了用于分割单词的字符,默认为空格、制表符和换行符。这对于控制如何解析输入非常关键。
  • $BASH_VERSION:如果你使用的是Bash shell,这个变量保存了当前Bash版本的信息。
  • $HOME:用户的家目录。
  • $PWD:当前工作目录。
  • $SECONDS:自脚本开始执行以来经过的秒数。
  • $RANDOM:生成一个随机整数。每次引用该变量时都会产生一个新的随机数。
  • $LINENO:当前正在执行的代码行号。
  • $BASH_SOURCE:对于函数或脚本,提供了一个数组,其中包含了调用栈中每个元素的文件名。
  • $FUNCNAME:如果在一个函数内,该变量包含了函数的名字。

在这里插入图片描述

$*"$@"

当未被双引号包围时,$*"$@"的行为相同,都是将所有位置参数视为一个字符串。但当它们被双引号包围时,"$*"会将所有参数视为单个以首个字符为分隔符(通常是空格)连接起来的字符串,而"$@"则会保持每个参数独立。
新建一个b.sh

#!/bin/bash
echo "Using \$*: $*"
echo "Using \"\$*\": \"$*\""
echo "Using \$@: $@"
echo "Using \"\$@\": \"$@\""

当你运行这个脚本并传入参数./script.sh "hello world" goodbye时,输出将会是这样的:

  • Using $*: hello world goodbye # 参数被当作单个字符串处理
  • Using "$*": "hello world goodbye" # 所有参数作为一个字符串,中间用空格分割
  • Using $@: hello world goodbye # 参数被视为独立的字符串
  • Using "$@": "hello world" "goodbye" # 每个参数都被独立地引用
    在这里插入图片描述

算术运算

常见的命令

1. 使用 expr 命令

expr 是一个非常基础但功能有限的工具,用于执行简单的算术运算。

result=$(expr 5 + 3)
echo $result  # 输出 8

注意:使用 expr 时,操作符和数字之间需要有空格。

2. 使用 $((...)) 语法

这是一种更现代且更简洁的方法,可以直接在变量赋值或命令替换中使用。

result=$((5 + 3))
echo $result  # 输出 8

# 或者直接输出
echo $((5 * 3))  # 输出 15

3.使用 let 命令

let 可以用来执行整数算术表达式,并将结果存储到变量中。

let result=5+3
echo $result  # 输出 8

4. 使用 bc 命令

bc 是一个强大的计算器,支持浮点运算和复杂的数学函数。

result=$(echo "scale=2; 5 / 3" | bc)
echo $result  # 输出 1.67 (保留两位小数)

# 执行更复杂的计算
result=$(echo "sqrt(9)" | bc -l)
echo $result  # 输出 3.00000000000000000000

其中,-l 选项加载了标准数学库,允许进行更高级的数学运算。

5. 使用 awk

awk 不仅是一个文本处理工具,也提供了丰富的数学运算能力。

result=$(awk 'BEGIN{print 5+3}')
echo $result  # 输出 8

# 浮点运算
result=$(awk 'BEGIN{printf "%.2f\n", 5/3}')
echo $result  # 输出 1.67

6. 使用 declare -i 来定义整数变量

这可以让你对变量进行直接的算术运算而不需要额外的命令。

declare -i num=5
num+=3
echo $num  # 输出 8

以expr为例,演示加减乘除取模

注意,符前后都需要空格隔开

+
-
\*  转义一下,linux的*代表任意
/
%

\( \) 括号需要转义

expr 6 \* 6(乘法是用\*,python.直接*就行了 要用\进行转义)

在这里插入图片描述

复杂一些的运算
注意括号需要转义,并且前后需要空格
在这里插入图片描述


http://www.kler.cn/a/410918.html

相关文章:

  • 【大数据学习 | Spark-Core】Spark的改变分区的算子
  • React表单联动
  • 鱼眼相机模型-MEI
  • docker pull命令拉取镜像失败的解决方案
  • redis的map底层数据结构 分别什么时候使用哈希表(Hash Table)和压缩列表(ZipList)
  • 新能源电机轴承电腐蚀,如何破?
  • 【论文复现】半监督学习与数据增强
  • 【Axure高保真原型】天气模板
  • Apache Maven Assembly 插件简介
  • Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)
  • Text、Data、BSS、Heap、Stack
  • PDF工具集套装 PDFgear v2.1.8 免费中文版
  • Vue 项目中 Axios 的封装方向探索
  • CBK8软件开发安全
  • 文件导入-使用java反射修改日期数据
  • 预告|ROS中超好用固定翼仿真开源平台即将上线!
  • CSS实现两组item中间边框不重复,且边框为渐变色
  • VXLAN详解
  • 【系统架构设计师】真题论文: 论软件架构建模技术与应用(包括解题思路和素材)
  • LLM | 论文精读 | CVPR | FairCLIP:追求视觉语言学习中的公平性
  • 初始ArkUI
  • lua除法bug
  • Ubuntu下手动设置Nvidia显卡风扇转速
  • shell与QQ邮箱的连接
  • etcd快速入门
  • 业务架构、数据架构、应用架构和技术架构