linux 脚本 字符串函数调用函数调用,Shell脚本函数中变量的用法

在 Shell 脚本函数中使用变量时,需要特别注意变量的定义方式以及处理方式。

Shell函数传递参数

在 Shell 中,函数可以使用标准的参数环境变量来表示命令行上传给函数的参数。在函数体内部,函数名会在“$n”变量中定义,函数命令行上的任何参数都会通过 $1、$2 等定义($1 表示第一个参数,$2 表示第二个参数)。同时也可以使用特殊变量“$#”来判断传给函数的参数数目。

在脚本中指定函数时,必须将参数和函数放在同一行中。例如:

abc $value1 5

其中,abc 就是一个函数。

【例 1】简单的函数的传参及返回值的情况。

使用 vim 编辑器打开脚本文件 test,输入 i 命令进入插入模式,输入如下命令:

function abc(){

echo $1

return 20

}

abc tom

echo $?

使用 sh(Bash)进程来执行脚本文件,输出结果为:

[root@bogon ~]# sh test.sh

tom

20

另外,还有特殊的字符用来处理参数,特殊字符及说明如表 1 所示。

表 1 特殊字符及说明

特殊字符

说 明

$#

传递到脚本的参数个数

$*

以一个单字符串显示所有向脚本传递的参数

$$

脚本运行的当前进程的 ID 号

S!

后台运行的最后一个进程的 ID 号

$@

与相同,但是使用时加引号,并在引号中返回每个参数

$-

显示 Shell 使用的当前选项,与 set 命令功能相同

$?

显示最后命令的退出状态。0 表示没有错误,其他任何值表明有错

变量的处理

函数通常使用以下两种类型的变量:

1) 全局变量

全局变量是在 Shell 脚本中任何地方都有效的变量。当在脚本的主体部分定义一个全局变量时,可以在函数内读取它的值;当在函数内定义一个全局变量时,可以在主体部分读取它的值。

默认情况下,在脚本中定义的任何变量都是全局变量。在函数外定义的变量可以在函数内正常访问。

全局变量的作用范围是当前的 Shell 进程,而不是当前的 Shell 脚本文件,这两个是不同的概念。打开一个 Shell 窗口就创建了一个 Shell 进程,打开多个 Shell 窗口就创建了多个 Shell 进程,每个 Shell 进程都是独立的,拥有不同的进程 ID。在一个 Shell 进程中可以使用 source 命令执行多个 Shell 脚本文件,此时全局变量在这些脚本文件中都有效。

【例 1】Shell进程。

打开一个 Shell 窗口,定义一个变量 a 并赋值为 10,这时在同一个 Shell 窗口中是可正确打印变量 a 的值的,如下所示:

[root@bogon ~]# a=10

[root@bogon ~]# echo $a

10

再打开一个新的 Shell 窗口,同样输出变量 a 的值,但结果却为空,如下所示:

[root@bogon ~]# echo $a

[root@bogon ~]#

由此可以看出,全局变量 a 仅仅在定义它的第一个 Shell 进程中有效,对新的 Shell 进程没有影响。变量名相同但变量值可以不相同。

2) 局部变量

不需要在函数中使用全局变量,函数内部使用的任何变量都可以被声明成局部变量,只需要在变量声明的前面加上关键字 local。local 关键字保证了变量只局限在该函数中。

【例 2】局部变量。

使用 vim 编辑器打开脚本文件 test.sh,输入 i 命令进入插入模式,输入如下命令:

function abc(){ local a=10 } abc echo $a

使用 sh(Bash)进程来执行脚本文件,输出结果为:

[root@bogon ~]# sh test.sh

[root@bogon ~]#

可以看出输出结果为空,表明变量 a 在函数外部无效,是一个局部变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值