声明
学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)
目录
向 Shell 脚本程序传递参数
在 Shell 脚本中,我们可以通过位置参数向脚本传递外部输入的参数。脚本可以通过特殊变量来访问这些参数,进而进行相应的处理。
位置参数介绍
在脚本执行时,命令行参数会依次赋值给特殊的变量。位置参数的编号从 $1
开始,$1
表示第一个参数,$2
表示第二个参数,依此类推。
常用位置参数
以下是一些常用的 Shell 脚本位置参数及其功能:
-
$0
:脚本的名称或路径。例如,如果脚本名为1.sh
,那么$0
的值就是1.sh
。 -
$1
到$9
:脚本的第一个到第九个参数。例如,$1
是第一个参数,$2
是第二个参数,依此类推。 -
$@
和$*
:所有传递给脚本的参数。这两个变量的区别在于处理带空格的参数时:$@
:每个参数会作为独立的字符串处理。$*
:所有参数会合并成一个字符串,参数之间用空格分隔。
-
$#
:传递给脚本的参数个数。例如,$#
在1.sh arg1 arg2 arg3
中会返回3
。 -
$?
:表示上一个命令的退出状态。值为0
表示命令执行成功,非0
表示命令失败。 -
$$
:表示脚本当前的进程 ID。
将参数传递到脚本
以下是一个示例脚本 1.sh
,它演示了如何通过位置参数获取传递给脚本的输入:
示例脚本 (1.sh
)
echo "执行的文件名是:$0"
echo "第一个参数是:$1"
echo "第二个参数是:$2"
echo "第三个参数是:$3"
echo "传递的参数作为一个字符串显示:$*"
echo "传递的参数独立作为每个字符串显示:$@"
echo "传递到脚本的参数个数是:$#"
echo "最后命令的退出状态:$?"
echo "脚本运行的当前进程ID是:$$"
假设你执行脚本时传递了参数:
sh 1.sh apple banana cherry
脚本的输出将是:
执行的文件名是:1.sh
第一个参数是:apple
第二个参数是:banana
第三个参数是:cherry
传递的参数作为一个字符串显示:apple banana cherry
传递的参数独立作为每个字符串显示:apple banana cherry
传递到脚本的参数个数是:3
最后命令的退出状态:0
脚本运行的当前进程ID是:12345
在 Shell 编程中进行数学运算
Shell 编程中进行数学运算有时会显得有些麻烦,但我们可以使用一些内置的工具,如 expr
来进行基本的运算。以下是一些常见的数学运算示例。
基本数学运算
Shell 提供了 expr
命令来执行简单的数学运算。常见的运算包括加法、减法、乘法、除法和取余。
示例:常见的运算
-
加法:
expr 1 + 1
-
减法:
expr 2 - 1
-
乘法:
expr 2 \* 2
-
除法:
expr 4 / 2
-
取余:
expr 20 % 10
注意:在使用 expr
时,运算符和数字之间必须加上空格,且乘法运算符 *
需要使用反斜杠 \
转义。
混合运算
在 Shell 中,进行混合运算时,如果表达式中包含括号,必须使用反斜杠 \
转义括号。以下是一个示例,计算 (1 + 1) * 3
:
expr \( 1 + 1 \) \* 3
该表达式将返回 6
,因为括号内的 1 + 1
会先计算,然后乘以 3
。
变量与混合运算
如果你想将变量与运算结合,可以通过赋值将表达式传递给 expr
或 eval
来执行。以下是一个使用变量的示例:
name='expr \( 1 + 1 \) \* 3'
eval $name
此时,Shell 会先将 name
变量的值作为命令来执行,相当于执行了 expr \( 1 + 1 \) \* 3
,并输出结果 6
。