【问题标题】:Linux Shell Script to execute another shell script using variables defined in multiple text files使用多个文本文件中定义的变量执行另一个 shell 脚本的 Linux Shell 脚本
【发布时间】:2011-09-15 21:20:08
【问题描述】:

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

基本上流程如下:

A.我在一个目录 (/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,那对我来说就不是问题,但可惜不是。

提前致谢。

【问题讨论】:

  • 您知道,您可以在命令行中使用 PHP。我相信 Ubuntu 软件包是php5-cli。然后你就可以编写 PHP 脚本了。
  • @Derobert:是的,我知道,但我打算使用 CRON 运行这个脚本。
  • 没有什么能阻止你从 cron 运行 PHP 脚本。 Shell 脚本并没有什么特别之处。将#!/usr/bin/php 放在最上面,chmod +x 它,它会像任何其他程序一样运行。
  • 好的,我会这样做的,我相信它也会容易得多。我正在使用我从源代码编译的 PHP-FPM。无论如何我都必须安装php-cli吗?!
  • 好吧,我只是假设您使用的是打包的 PHP。如果您使用的是自编译版本,则只需编译它以获得命令行支持。您可能已经这样做了;看看你有没有 'php' 或 'php5' 命令。

标签: php linux shell ubuntu


【解决方案1】:

在 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

【讨论】:

    【解决方案2】:

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

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

    注意,如果你写:

    . mystery_settings_file
    

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

    【讨论】:

      猜你喜欢
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      相关资源
      最近更新 更多