2011-09-15 138 views
0

我想寫一個Linux Shell腳本來在我的服務器上執行一些自動操作。順便說一句,我正在使用Ubuntu 11.04。Linux Shell腳本使用多個文本文件中定義的變量來執行另一個shell腳本

基本上,過程如下:

答:我創建一個目錄(/ home/MYDIR)使用PHP多個文本文件。這些文本文件是shell腳本的存根,它們只包含變量定義。以下是其中一個文件可能存在的示例。

username="myusername1" 
password="mypassword1" 
othersettings="othersettings1" 

B.我有一個設置shell腳本引用上述變量。下面是什麼可能是在腳本的一部分:

#!/bin/bash 
mkdir /home/newdir/$username 

我試圖寫一個激活shell腳本,將找出有多少這些文件都在/ home/mydir的,然後執行安裝用於目錄中每個文件的shell腳本。因此,例如,如果我有5個文件,包含5個不同的用戶名,密碼等,安裝腳本將使用每個文本文件中的變量運行5次,以完成此腳本中定義的任務。

我很感謝一些如何編寫這樣的腳本的幫助。我的想法是,我應該使用可能ls -1 /home/mydir | grep .txt來獲取所有txt文件,然後將它們提取到一個數組,然後迭代並執行腳本,但我不是shell腳本專家,所以我需要一些幫助句法。如果shell腳本是PHP,那對我來說不會有問題,但是可惜的是,它不是。

在此先感謝。

+0

您知道,您可以在命令行使用PHP。我相信Ubuntu包是'php5-cli'。然後你可以編寫PHP腳本。 – derobert

+0

@Derobert:是的,我知道,但我打算使用CRON運行此腳本。 –

+0

沒有讓你從cron運行PHP腳本。 Shell腳本沒有特別之處。把'#!/ usr/bin/php'放在最上面,chmod + x它,它會像其他程序一樣運行。 – derobert

回答

2

在殼裏做這樣的方式是這樣的:

for f in /home/mydir/*.txt; do 
    . "$f" # source settings file 
    mkdir "/home/newdir/$username" 
done 

但正如我在我的評論中提到,你可以只寫在PHP腳本。

#!/usr/bin/php 
<?php 
... 
?> 

編輯

你的代碼的工作,我只是編輯它調用一個shell腳本中的shell腳本,這是我真正想做的事。所以下面的代碼也起作用。

#!/bin/bash 
for f in /home/dir/*.txt 
do 
    . "$f" 
    . /path/to/setup-shell-script #referenced in B of the original question 
done 
+0

謝謝。這對我有效。我只是稍微編輯了代碼 –

1

這是.source命令用於shell腳本中的內容;它會讀取參數(文件)的內容並執行它們。小心人們強迫腳本使用你不打算使用的文件。請注意,C shell包含source命令(僅限Bourne shell支持.); Bash提供了兩個。

. /home/mydir/mystery_settings_file 
mkdir /home/newdir/$username 

請注意,如果你寫:

. mystery_settings_file 

外殼將使用它$ PATH,但該文件只能夠閱讀的搜索(它不需要是可執行文件)。這可能非常有用。