bash 函数库
对某些很常用的功能,必须考虑将其独立出来,集中存放在一些独立的文件中,这些文件就称为“函数库”。这么做的好处是在后期开发的过程中可以直接利用这些库函数写出高质量的代码。
库函数的本质也是“函数”,所以它的定义方式和普通函数没有任何区别,但为了和一般函数区分开来,在实践中建议库函数使用下划线开头。
由于Shell是一门面向过程的脚本型语言,而且用户主要是Linux系统管理人员,所以并没有非常活跃的社区,这也造成了Shell缺乏第三方函数库,所以在很多时候需要系统管理人员根据实际工作的需要自行开发函数库。下面建立一个叫lib01.sh的函数库,该函数库目前只有一个函数,用于判断文件是否存在。
[root@Centos8_test bashpractise]# cat lib01.sh
_checkFileExists(){
if [ -f $1 ]
then
echo "File:$1 exists"
else
echo "File:$1 not exists"
fi
}
其他脚本在希望直接调用_checkFileExists函数时,可以通过直接加载lib01.sh函数库的方式实现。加载方式有以下两种:
#使用“点”命令
[root@localhost ~]# . /PATH/TO/LIB
#使用source命令
[root@localhost ~]# source /PATH/TO/LIB
假设现在有个脚本想要直接调用_checkFileExists函数,可以通过加载lib01.sh函数库来实现。从下面的演示可以看出,通过调用函数库的方式会使开发脚本变得更为简便。
[root@Centos8_test bashpractise]# cat callLib01.sh
#!/bin/bash
source ./lib01.sh #引用当前目录下的lib01.sh函数库
_checkFileExists /etc/not
_checkFileExists /etc/passwd
执行结果
[root@Centos8_test bashpractise]# ./callLib01.sh
File:/etc/not not exists
File:/etc/passwd exists
很多Linux发行版中都有/etc/init.d目录,这是系统中放置所有开机启动脚本的目录,这些开机脚本在脚本开始运行时都会加载/etc/init.d/functions或/etc/rc.d/init.d/functions函数库(实际上这两个函数库的内容是完全一样的)