首页 > 解决方案 > 创建一个主 bash 工具箱脚本调用工具作为单独的脚本

问题描述

很难为我的问题找到合适的标题!可能比我想的要简单得多,对此感到抱歉!

目标:

我想构建一个 bash 脚本(工具)集合,所有这些都在一个主 bash 脚本的控制下,该脚本处理一般参数并加载共享函数,然后交给工具代码。

我从我经常使用的 java 应用程序中得到启发,这些应用程序可以被称为

mainApp task param1 param2 ... paramn

其中“mainApp”是主 bash 脚本,“task”是子文件夹 (/tools) 中可能存在的工具之一,“param(1..n)”是传递给任务脚本的参数。

“任务”脚本不仅仅是 bash 函数,它们可能非常大,并且包括它们自己的测试和评估,为了模块化和可读性,我想将它们排除在主脚本之外。我不喜欢 20 页长的 bash 脚本 ;-)

一些任务脚本会调用其他更通用的脚本。

问:

我没有直接看到如何处理 mainApp 中的参数“task”以根据“task”值选择和运行第二个脚本(我应该使用 case 和/或 eval 吗?)

你能帮我很好地构建这个结构,或者给我指出一个入门或适当的措辞来搜索这个主题。

谢谢

标签: bashshell

解决方案


你可以做这样的事情mainApp

#! /bin/bash

T=/path/to/tasks

if [[ $# -lt 1 ]]
then
    echo 'usage'
    exit 1
fi

task="$1"
shift
if [[ -x "$T/$task" ]]
then
    exec "$T/$task" "$@"
else
    echo "no such task $task"
fi

因此,如果您添加任务或更改参数,则不必更改mainApp脚本。

您的任务应该都在tasks目录中,并且必须具有可执行权限。


推荐阅读