Shell脚本编程(16)之创建函数库

Shell脚本编程(16)之创建函数库

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

本部分内容参考自《Linux命令行与shell脚本编程大全 第3版》。

使用函数可以在脚本中省去一些输入工作,这一点是显而易见的。但如果你碰巧要在多个脚本中使用同一段代码呢?显然,为了使用一次而在每个脚本中都定义同样的函数太过麻烦。
有个方法能解决这个问题! bash shell 允许创建函数库文件,然后在多个脚本中引用该库文件。
这个过程的第一步是创建一个包含脚本中所需函数的公用库文件。这里有个叫作 myfuncs 的库文件,它定义了 3 个简单的函数。

$ cat myfuncs.sh 
#!/bin/bash
function addem {
	echo $[ $1 + $2 ]
}
function multem {
	echo $[ $1 * $2 ]
}
function divem {
	if [ $2 -ne 0 ]
	then
		echo $[ $1 / $2 ]
	else
		echo -1
	fi
}

下一步是在用到这些函数的脚本文件中包含 myfuncs 库文件。从这里开始,事情就变复杂了。
问题出在 shell 函数的作用域上。和环境变量一样,shell 函数仅在定义它的 shell 会话内有效。如果你在 shell 命令行界面的提示符下运行 myfuncs shell 脚本, shell 会创建一个新的 shell 并在其中运行这个脚本。它会为那个新 shell 定义这三个函数,但当你运行另外一个要用到这些函数的脚本时,它们是无法使用的。
这同样适用于脚本。如果你尝试像普通脚本文件那样运行库文件,函数并不会出现在脚本中。

$ cat test13.sh 
#!/bin/bash
./myfuncs.sh
result=$(addem 10 15)
echo "The result is $result"
$ ./test13.sh 
./test13.sh: line 10: addem: command not found
The result is 

使用函数库的关键在于 source 命令。source 命令会在当前 shell 上下文中执行命令,而不是创建一个新 shell。可以用 source 命令来在 shell 脚本中运行库文件脚本。这样脚本就可以使用库中的函数了。
source 命令有个快捷的别名,称作点操作符(dot operator)。要在 shell 脚本中运行 myfuncs 库文件,只需添加下面这行:

. ./myfuncs

这个例子假定 myfuncs 库文件和shell脚本位于同一目录。如果不是,你需要使用相应路径访问该文件。这里有个用 myfuncs 库文件创建脚本的例子。

$ cat test14.sh 
#!/bin/bash
. ./myfuncs.sh
result=$(addem 10 15)
echo "The result is $result"
$ ./test14.sh 
The result is 25

该脚本成功地使用了 myfuncs 库文件中定义的函数。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/shell-16.html

Buy me a cup of coffee ☕.