声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频)
本章课程链接:shell (3)脚本参数传递与数学运算_哔哩哔哩_bilibili
脚本参数传递
1.基本概念
在 Shell 脚本中,参数传递是一种将外部的值传递到脚本内部的机制。当执行一个 Shell 脚本时,可以在脚本名称后面跟上一些参数,这些参数可以在脚本内部被使用,就像函数的参数一样。
在 Shell 脚本中,参数可以通过特殊的变量来访问。$0代表脚本本身的名称,$1代表传递给脚本的第一个参数,$2代表第二个参数,以此类推。$#表示传递给脚本的参数的个数。
例如,下面是一个简单的脚本5.sh:
echo "脚本名称是:$0"
echo "第一个参数是:$1"
echo "第二个参数是:$2"
echo "参数的个数是:$#"
当执行./5.sh hello world时,输出结果如下:
2.特殊参数处理
$* 会将所有的参数作为一个字符串传出,以空格分隔的字符串。
$0:脚本名称。
$#:传递给脚本的参数个数。
$@:与 $* 类似,但保留参数的分隔方式。
$$:当前脚本的进程 ID。
$?:上一个命令的返回值(退出状态)。
$_: 上一个命令的最后一个参数。
"$*":将所有参数视为一个整体,参数之间使用$IFS分隔。
"$@":将每个参数视为独立的个体。
例如6.sh:
echo "使用\$*获取所有参数:$*"
3.参数的移位操作
shift命令用于将参数向左移动。每次执行shift命令,$1的值会被丢弃,$2的值会变成$1,$3的值会变成$2,以此类推。
例如,下面的脚本7.sh:
echo "初始的第一个参数:$1"
shift
echo "移位后的第一个参数:$1"
当执行./7.sh arg1 arg2时,输出是:
4.使用参数进行条件判断和运算
可以根据传递的参数进行条件判断。例如,判断参数是否符合特定的格式或者范围。
下面是一个简单的脚本check_arg.sh,用于检查第一个参数是否是数字:
if [[ $1 =~ ^[0 - 9]+$ ]]; thenecho "第一个参数是数字。"
elseecho "第一个参数不是数字。"
fi
也可以对参数进行算术运算。例如,有一个脚本add_args.sh用于计算两个参数的和:
sum=$(($1 + $2))
echo "两个参数的和是:$sum"
向脚本传递参数:
echo 执行的文件名是: $0
echo 第一个参数是: $1
echo 传递的参数作为一个字符串显示: $*
echo 传递的参数独立作为每个字符串显示: $@
echo 传递到脚本的参数个数是: $#
echo 最后命令的退出状态: $?
echo 脚本运行的当前进程ID是: $$
可以向脚本程序传递一个或者多个参数 ,脚本中的$1.里面的数字是可以依次递增的,比如$1.$2,$3等等,其中的$0(比较特殊表示文件名称)
如:
shell的数学运算
基本算术运算
在 Shell 中可以进行基本的算术运算,如加法、减法、乘法和除法。常见的有两种方式,一种是使用expr命令,另一种是使用$(( ))或$( )(在某些情况下)结构。
使用expr命令
加法示例:
expr 2 + 3,在命令行中输入这个命令,会返回结果5。注意,expr命令中的运算符和操作数之间需要用空格隔开。
减法示例:
expr 5 - 2会返回3。
乘法示例:
乘法稍微有点复杂,因为在expr命令中,乘法运算符需要转义。例如,expr 3 \* 4会返回12。
取余运算(模运算)
取余运算可以得到除法运算的余数。使用expr命令
例如,expr 7 % 3会返回1,即 7 除以 3 的余数。
使用$(( ))结构
可以写成echo $((7 % 3)),同样会返回1。
除法示例:
expr 10 / 2会返回5。
使用$(( ))结构
这是一种更方便的算术运算方式。例如,echo $((2 + 3))会在终端输出5。它支持多种算术运算,并且不需要对运算符进行特殊处理(如乘法不需要转义)。减法可以这样写:echo $((7 - 4)),输出为3;乘法如echo $((3*4)),输出为12;除法如echo $((10/2)),输出为5。
加减法:
乘除法:
取余
混合运算(Shell会先乘除后加减)
如果想先加减后乘除可以使用括号,但是需要使用转义符\
如:
运算与变量结合
注意是反引号 [ ` ] ——ESC键下方,1键左方
反引号与单引号的区别: