Shell脚本函数中变量的用法
在 Shell 脚本函数中使用变量时,需要特别注意变量的定义方式以及处理方式。
在脚本中指定函数时,必须将参数和函数放在同一行中。例如:
使用 vim 编辑器打开脚本文件 test,输入 i 命令进入插入模式,输入如下命令:
【例 1】Shell进程。
打开一个 Shell 窗口,定义一个变量 a 并赋值为 10,这时在同一个 Shell 窗口中是可正确打印变量 a 的值的,如下所示:
【例 2】局部变量。
使用 vim 编辑器打开脚本文件 test.sh,输入 i 命令进入插入模式,输入如下命令:
声明:《Linux系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
Shell函数传递参数
在 Shell 中,函数可以使用标准的参数环境变量来表示命令行上传给函数的参数。在函数体内部,函数名会在“$n”变量中定义,函数命令行上的任何参数都会通过 $1、$2 等定义($1 表示第一个参数,$2 表示第二个参数)。同时也可以使用特殊变量“$#”来判断传给函数的参数数目。在脚本中指定函数时,必须将参数和函数放在同一行中。例如:
abc $value1 5
【例 1】简单的函数的传参及返回值的情况。其中,abc 就是一个函数。
使用 vim 编辑器打开脚本文件 test,输入 i 命令进入插入模式,输入如下命令:
function abc(){
echo $1
return 20
}
abc tom
echo $?
[root@bogon ~]# sh test.sh
tom
20
特殊字符 | 说 明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程的 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
[root@bogon ~]# echo $a
[root@bogon ~]#
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 ~]#
声明:《Linux系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。