linux之Shell编程(3)--Shell参数传递实例演示

一.Shell传递参数的格式

脚本内获取参数的格式为:$n(n为数字),例如:1为执行脚本的第一个参数,2为执行脚本的第二个参数。

二.Shell传递参数实例演示

vim创建canshu.sh后输入以下内容,保存。
linux之Shell编程(3)--Shell参数传递实例演示_第1张图片

给脚本设置可执行权限后输入 ./canshu.sh 1 2 3 后结果如下
linux之Shell编程(3)--Shell参数传递实例演示_第2张图片

从结果可知:
$0为执行文件名(包含文件路径)
执行文件名后的1,2,3就是传入的参数

特殊字符处理参数
$#:传递到脚本的参数个数
$$:脚本运行的当前进程ID号
$!:后台运行的最后一个进程的ID号
$?:显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$*:传递的参数用字符串显示出来(返回的参数为一个字符串)
$@:传递的参数显示出来(返回每个引号的参数)

演示:
linux之Shell编程(3)--Shell参数传递实例演示_第3张图片
运行结果:
linux之Shell编程(3)--Shell参数传递实例演示_第4张图片
分析:
从结果看$*和 $@可能并没有什不同,但是实际上 $ *输出的是"1 2 3",而$@输出的结果为"1",“2”,“3”,一个是字符串,一个是三个字符

$@ 和 $*的区别
@表示每一个独立的参数,如"1",“2”,“3”(表示传递了三个参数)。
*表示一个整体,如"1 2 3"(传递了一个参数)
相同点都是传递参数,只是表示的传递参数的个数可能不同。

使用循环输出演示 $*和 $@的不同

linux之Shell编程(3)--Shell参数传递实例演示_第5张图片
结果:
linux之Shell编程(3)--Shell参数传递实例演示_第6张图片
可以发现:
循环输出 $*只得到一个参数为"1 2 3"。
循环输出 $@得到三个参数为"1",“2”,“3”。

三.判断参数是否为空

linux之Shell编程(3)--Shell参数传递实例演示_第7张图片

这一段脚本有很多值得注意的地方
1.注释:单行注释可以使用 #,多行注释使用
: << !
注释的脚本代码
!
或者
: '
注释的代码

或者
if false; then
注释的代码
fi
2.[ -n “$1” ]中的 [] 使用空格隔开,这一段表示第一个参数是否为空"$1"可以改为"$2"或者其他的。
3 if语句要以fi为结束符,类似于endif。

上面的结果演示:
linux之Shell编程(3)--Shell参数传递实例演示_第8张图片
改为"$2"会怎样呢
linux之Shell编程(3)--Shell参数传递实例演示_第9张图片

结果:
linux之Shell编程(3)--Shell参数传递实例演示_第10张图片

知识点:
Shell里的[]与[[]]
1.判断一个变量是否为n, [ $var -eq n ] (n为变量,可以是1,2,3)。
2.文件判断,文件是否存在[ -e $var ], 是否是目录,[ -d $var ]。
3.字符串比较,判断两个字符串是否相同, [[ $var1 = $var2 ]]。

演示:
linux之Shell编程(3)--Shell参数传递实例演示_第11张图片
linux之Shell编程(3)--Shell参数传递实例演示_第12张图片
结果:
linux之Shell编程(3)--Shell参数传递实例演示_第13张图片

Shell参数传递的实例演示就讲到这里,后面还会进一步演示Shell的其他编程的知识。

你可能感兴趣的:(Shell,linux,shell,字符串)