让Bash脚本检查目录中的文件,并根据每个文件执行操作

让Bash脚本检查目录中的文件,并根据每个文件执行操作,bash,Bash,这是我第一次发帖,我以前使用过这里的代码示例,非常感谢您的帮助 我目前有一个包含数十个函数的大型Bash脚本,它正在增长,并且越来越难管理。每个函数实际上是一个完全独立的模块,为了便于开发,并且能够轻松地允许社区贡献的模块,而无需集成每个模块,我想添加一些功能,以拥有独立的模块文件,主脚本将自动看到这些文件,并添加到插件中 目前我有:(超级简化) script.sh #! /bin/bash function one { stuff } function two { different

这是我第一次发帖,我以前使用过这里的代码示例,非常感谢您的帮助

我目前有一个包含数十个函数的大型Bash脚本,它正在增长,并且越来越难管理。每个函数实际上是一个完全独立的模块,为了便于开发,并且能够轻松地允许社区贡献的模块,而无需集成每个模块,我想添加一些功能,以拥有独立的模块文件,主脚本将自动看到这些文件,并添加到插件中

目前我有:(超级简化)

script.sh

#! /bin/bash

function one {
 stuff
}

function two {
 different stuff
}

one
two
exit
但是我更希望有一个自动检查目录的脚本(比如“modules/”),任何后缀为.module的文件(例如lights.module)都会被加载到菜单中(我已经有一个功能良好的whiptail菜单系统)

我试过很多东西,从谷歌和stackoverflow,但我似乎遇到了麻烦

我可以创建一个包含模块名称列表的文件,这样就可以随意插入模块,并将其显示在列表中:

for entry in /home/tony/scripts/test/modules/*
do
 echo "$entry" >> modules.list # Append the name of present modules to the list of modules
done

但是我如何让我的脚本知道这些模块名称,并对它们进行处理(例如,将它们插入whiptail菜单,并在选中的情况下调用它们)。

KSH已经自动加载了这类东西-似乎意味着Bash有一个可用的端口。

您是否考虑过拥有一个文件夹,然后运行:

for module in somefolder/*.module; do
    source $module
done

如果需要,您可以按照所需的执行顺序按字母顺序对模块进行排序

这个问题让我想起了很多实用程序。如果您试图用bash脚本实现这一点,我建议您使用数组加载您想要的任何模块,并弹出您不想要的任何模块。今晚晚些时候我可能会添加一个示例。如果模块是源代码,则可能要求每个模块在任何函数之外包含一行,例如:
modulelist+=('modulename')
,其中modulelist是一个数组。如果模块文件中有多个函数,则可以将每个函数添加到列表中。(
modulelist=(${modulelist[@]}'modulename')
如果+=运算符在特定版本的bash中导致问题。)在几十个模块中,用户可能只想运行一个或两个。我想我真的需要得到模块名称的列表,每个名称被分配一个唯一的变量。也许我应该找一个数组?(数组新手)。@tonyhughes因此,当然,您可以创建一个数组,其中键是模块名,值是模块的路径,由用户选择,然后仅源(或运行)您想要的。不确定我们是否在回答您的问题。。。不过,以防万一,还是要谢谢你。Bash数组显然是我所需要的。我现在有了一个数组,该数组将自动填充所有存在的*.module文件的名称。但是如何将数组中的每个元素分配给唯一的变量呢?例如,编码检查数组,如果有三个元素,则将第一个元素的内容分配给$VARIABLE1,然后将第二个元素分配给$VARIABLE2等。进一步阅读,这些元素是否已经可以作为变量访问?