欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > shell编程3,参数传递+算术运算

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

2024/12/1 9:29:56 来源:https://blog.csdn.net/2202_75361164/article/details/144068818  浏览:    关键词: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.直接*就行了 要用\进行转义)

在这里插入图片描述

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com