2013-02-06 25 views
0

這是我第一次發佈,我過去使用過這裏的代碼示例,並感謝幫助。獲取Bash腳本來檢查目錄中的文件並根據每個文件執行操作

我目前有一個很大的Bash腳本,它有很多功能,而且它正在增長,並且越來越難以管理。每個函數實際上都是一個完全獨立的模塊,爲了便於開發,並且能夠輕鬆地允許社區貢獻的模塊,而不需要集成每個模塊,我想添加具有獨立模塊文件的功能,主腳本會自動見,並添加

目前我有:(超簡體)

script.sh

#! /bin/bash 

function one { 
stuff 
} 

function two { 
different stuff 
} 

one 
two 
exit 

但希望有一個腳本,自動檢查目錄(比如,「模塊/ 「),任何帶有後綴.module(例如lights.module)的文件都會被加載到一個菜單中(我有一個很好的功能whiptail菜單系統已經)。

我已經嘗試了一些東西,從谷歌和從計算器,但我似乎已經打了一堵牆。

我可以創建模塊名稱的列表的文件 - 這樣的模塊可以隨意丟棄的,它出現在列表中:

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菜單中,並在選擇時調用它們)。

+0

這個問題讓我想起了很多[模塊的模塊](http://linux.die.net/man/1/module)實用程序。如果你想用bash腳本來做到這一點,我建議使用一個數組來加載你想要的任何模塊,並彈出你不想要的任何模塊。我可以在今晚晚些時候添加一個例子。 – Steve

回答

0

KSH有自動加載的那種東西 - this似乎暗示有一個端口可用於Bash。

1

你有沒有考慮有一個文件夾,然後運行:

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

如果需要,你可以按字母順序排序您在所期望的執行順序

+0

如果模塊來源,它可能是一個要求,每個模塊包含任何功能以外的線路,如:'modulelist + =('modulename')'其中modulelist是一個數組。如果模塊文件中有多個功能,則每個功能都可以添加到列表中。 ('modulelist =($ {modulelist [@]}'modulename')'如果+ =操作符在特定版本的bash中導致問題。) – William

+0

用戶可能只想運行一兩個模塊。我想我真的需要獲取模塊名稱列表,每個名稱都分配了一個唯一的變量。也許陣列是我應該看的地方? (數組的新功能)。 – tonyhughes

+0

@tonyhughes所以,當然,你可以創建一個數組,其中的鍵是模塊的名稱,值是模塊的路徑,讓用戶選擇,然後源(或運行)只有你想要的。不知道我們正在回答你的問題......以防萬一,這裏是[bash陣列教程](http://www.thegeekstuff.com/2010/06/bash-array-tutorial/) – Miquel

相關問題