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

时间:2011-09-15 21:20:09

标签: php linux shell ubuntu

我正在尝试编写一个Linux Shell脚本来在我的服务器上进行一些自动化。顺便说一句,我正在使用Ubuntu 11.04。

基本上,流程如下:

一个。我在目录(/ home / mydir)中使用PHP创建多个文本文件。这些文本文件是shell脚本的存根,它们只包含变量定义。以下是其中一个文件中的内容示例。

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

B中。我有一个引用上述变量的安装shell脚本。以下是脚本中可能包含的内容的一部分:

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

我正在尝试编写一个激活shell脚本,该脚本将找出/ home / mydir中有多少这些文件,然后为目录中的每个文件执行setup shell脚本。因此,例如,如果我有5个不同用户名,密码等的5个文件,则使用每个文本文件中的变量运行5次安装脚本,以完成此脚本中定义的任务。

我很感激有关如何编写这样一个脚本的帮助。我的思维方式是我应该使用ls -1 /home/mydir | grep .txt获取所有txt文件,然后将它们提取到数组,然后迭代并执行脚本,但我不是shell脚本专家所以我需要一些语法帮助。如果shell脚本是PHP,那对我来说不会有问题,但唉,事实并非如此。

提前致谢。

2 个答案:

答案 0 :(得分:2)

在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

答案 1 :(得分:1)

这是shell脚本中.source命令的用途;它将读取参数(文件)的内容并执行它们。请注意,人们强迫您的脚本使用您不打算使用的文件。请注意,C shell包含source命令(仅支持Bourne shell .); Bash提供了两者。

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

请注意,如果你写:

. mystery_settings_file

shell将使用$ PATH搜索它,但该文件只能是可读的(它不需要是可执行的)。这非常有用。