Linux Shell脚本,使用多个文本文件中定义的变量执行另一个Shell脚本


Linux Shell Script to execute another shell script using variables defined in multiple text files

我想写一个Linux Shell脚本在我的服务器上做一些自动化。顺便说一下,我用的是Ubuntu 11.04。

基本上,过程如下:

。我使用PHP在目录(/home/mydir)中创建了多个文本文件。这些文本文件是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,这对我来说就不是问题了,但是,唉,它不是。

在shell中这样做:

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

这是.source命令在shell脚本中的作用;它将读取参数(文件)的内容并执行它们。谨防有人强迫您的脚本使用您不希望他们使用的文件。注意,C shell包含source命令(Bourne shell只支持.);Bash都提供了。

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

注意如果你写:

. mystery_settings_file

shell将使用$PATH搜索它,但是该文件必须是可读的(它不需要是可执行的)。