加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Shell 变量概述

发布时间:2023-06-08 13:50:25 所属栏目:教程 来源:
导读:在 Shell 脚本编写中,我们为了使得程序灵活和无状态,有些变量我们不便于在脚本中写死,需要运用外部参数传递进去,每次传递的东西不一样,得到的结果也不尽相同,参数是与变量相辅相成的,将参数传递进 Shell 脚本
在 Shell 脚本编写中,我们为了使得程序灵活和无状态,有些变量我们不便于在脚本中写死,需要运用外部参数传递进去,每次传递的东西不一样,得到的结果也不尽相同,参数是与变量相辅相成的,将参数传递进 Shell 脚本中,也就成了变量,参数的使用使得我们的脚本更加的灵活和可扩展,同样也更易维护。

1.1 Shell 参数是什么
Shell 参数是我们在脚本文件外部传入的一系列参数,或是在 Shell 脚本中给函数传递的参数,其实质也就是上一节我们学习的变量,其与变量相辅相成,共同组成 Shell 脚本的一部分。

1.2 为什么要用参数
我们在变量一节知道了为什么利用变量,在此原因与变量类似,参数的使用使得我们的 Shell 脚本更加灵活,不需要在脚本中写死一些名称,根据用户的输出完成特定的功能,例如编写脚本计算 100 内数字的和,但是如果我们想计算 1000 呢?100000 呢?每次都需要修改脚本么,我们可以利用参数传递进计算脚本中,这样需要计算多少就由我们自己控制,这样的脚本也更加灵活,参数赋予脚本更强大的功能。

2. Shell 参数分类
我们知道了 Shell 中参数是什么,来看一下 Shell 脚本中参数的分类。

2.1 位置参数
位置参数顾名思义,就是传递给脚本参数的位置,例如给一个脚本传递一个参数,我们可以在 Shell 脚本内部获取传入的位置参数,获取参数的格式为:$n。n 代表一个数字。例如传递给脚本的第一个参数就为 $1,第 2 个参数就为 $2, 以此类推……,其中 $0 为该脚本的名称。

在我们讲解变量的时候,变量的一条规范就是名字不能以数字开头,在此就是为了避免与 Shell 的位置参数相同引发异常。

例如:

[root@master Shell_args]# cat args1.sh #!/bin/bashecho 第一个参数为: $1echo 第二个参数为: $2echo 脚本名称为: $0[root@master Shell_args]# bash args1.sh python go第一个参数为: python
第二个参数为: go
脚本名称为: args1.sh
我们可以看到传递给 args1.sh 脚本两个位置参数,第一个为 python, 第二个为 go, 脚本名称为 args1.sh

2.2 特殊参数
在 Shell 中也存在特殊含义的参数如下表:

变量    含义
$#    传递给脚本或函数的参数个数总和
$*    传递给脚本或函数的所有参数,当被双引号 包含时,所有的位置参数被看做一个字符串
$@    传递给脚本或函数的所有参数,当被双引号 包含时,每个位置参数被看做独立的字符串
$?    上个命令的退出状态,或函数的返回值,0 为执行成功,非 0 则为执行失败
$$    当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。
示例:

[root@master Shell_args]# cat args2.sh                 #!/bin/bashecho 第一个参数为: $1echo 第二个参数为: $2echo 脚本名称为: $0echo 脚本接受参数总数为: $#curl -I baidu.comecho 运行命令的状态为:$?echo 脚本的ID为:$$echo \$*的结果为:$*echo \$@的结果为:$@for i in $*;doecho $idonefor j in $@;do echo $jdone# 运行脚本来进行测试[root@master Shell_args]# bash args2.sh go python Shell第一个参数为: go
第二个参数为: python
脚本名称为: args2.sh
脚本接收参数总数为: 3
HTTP/1.1 200 OK
Date: Sun, 08 Mar 2020 07:32:22 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: 51-47cf7e6ee8400Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Mon, 09 Mar 2020 07:32:22 GMT
Connection: Keep-Alive
Content-Type: text/html
 
运行命令的状态为:0
脚本的ID为:23333$*的结果为:go python Shell$@的结果为:go python Shell
go python Shell
go
python
Shell
我们能够通过上述例子看出,运行 curl -I baidu.com 的输出为 0,即为命令运行正常,获取到了正常的返回值;

$@与 $* 看上去很像,都是传递给脚本或函数的所有参数;

$* 当被双引号 包含时,所有的位置参数被看做一个字符串,我们用 for 循环遍历的时候可以看到输出为一行;

$@当被双引号 包含时,每个位置参数被看做独立的字符串,我们用 for 循环遍历的时候可以看到为每个字符串输出为单独的一行。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章