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" 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" 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(){ } run check "确认进行检查?"
|
2、改写 modules/modify.sh
1 2 3 4 5
| echo -e "appname=${appname}" function modify(){ } run modify "确认进行修改?"
|