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.直接*就行了 要用\进行转义)
复杂一些的运算
注意括号需要转义,并且前后需要空格