一个计算机技术爱好者与学习者

0%

好好学Shell:脚本模块化

1. 脚本模块化

Shell脚本调用脚本的方法有两种,第一种是bash调用,在子shell里执行子脚本;第二种是引用调用,在当前脚本里执行子脚本。

脚本的模块化,两种调用方法都能实现,这里推荐第二种方法:引用调用。

引用调用时,父脚本和子脚本里的变量是共用的。

2. 模块化设计

1、创建modules目录,后续模块放入这个目录里

2、创建文件 modules/check.sh

1
2
3
4
5
6
7
8
read -p "确认进行检查?[Y/N]" input
if [[ $input = "y" || $input = "Y" ]];then
echo -e "\n------ continue... ------\n"
# check something
echo -e "\n------ finished ------\n"
else
echo -e "\n------ 不检查 ------\n"
fi

3、创建文件 modules/modify.sh

1
2
3
4
5
6
7
8
read -p "确认进行修改?[Y/N]" input
if [[ $input = "y" || $input = "Y" ]];then
echo -e "\n------ continue... ------\n"
# modify something
echo -e "\n------ finished ------\n"
else
echo -e "\n------ 不修改 ------\n"
fi

4、创建文件 main.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

function main(){
# 参数提示和校验,代码省略
read -p "确认参数正确,继续执行脚本?[Y/N]" input
if [[ $input = "y" || $input = "Y" ]];then
echo -e "\n------ continue... ------\n"
else
echo -e "\n------ exit ------\n"
exit 1
fi
# 调用各个模块
source modules/check.sh
source modules/modify.sh
}

main "$@"

其中,参数提示和校验部分代码参考 《Shell脚本之参数提示和校验》

3. 交互部分模块化

交互部分模块化,可以选择是否开启交互。

1、改写main.sh,抽象出函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash

INTERACTIVE=true
CHECK_ENABLE=true
MODIFY_ENABLE=true

function run() {
func=$1
info=$2
if [[ ${INTERACTIVE} = false ]];then
${func}
return 0
fi

read -p "${info} [Y/N]" input
if [[ $input = "y" || $input = "Y" ]];then
${func}
else
echo "放弃操作"
return 1
fi
return 0
}

function nothing(){
:
}

function main(){
# 参数提示和校验,代码省略

run nothing "确认参数正确,继续执行?"
[[ $? -ne 0 ]] && exit 1

# 调用各个模块
[[ ${CHECK_ENABLE} = true ]] && source modules/check.sh
[[ ${MODIFY_ENABLE} = true ]] && source modules/modify.sh
}

main "$@"

2、改写 modules/check.sh

1
2
3
4
5
echo -e "appname=${appname}"
function check(){
# check something
}
run check "确认进行检查?"

2、改写 modules/modify.sh

1
2
3
4
5
echo -e "appname=${appname}"
function modify(){
# modify something
}
run modify "确认进行修改?"
  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-shell-modules/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~