Linux Shell Script для запуска другого сценария оболочки с использованием переменных, определенных в нескольких текстовых файлах - PullRequest
0 голосов
/ 16 сентября 2011

Я пытаюсь написать сценарий оболочки Linux для автоматизации на моем сервере.Кстати, я использую Ubuntu 11.04.

По сути, процесс выглядит следующим образом:

A.Я создаю несколько текстовых файлов, используя PHP в каталоге (/ home / mydir).Эти текстовые файлы являются заглушками сценария оболочки и содержат только определения переменных.Вот пример того, что может быть в одном из файлов.

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

B.У меня есть сценарий оболочки установки, который ссылается на вышеупомянутые переменные.Ниже приведена часть того, что может быть в сценарии:

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

Я пытаюсь написать сценарий оболочки активации, который выяснит, сколько этих файлов находится в / home / mydir, а затем выполнитсценарий оболочки установки для каждого из файлов в каталоге.Так, например, если у меня 5 файлов с 5 разными именами пользователей, паролями и т. Д., Сценарий установки будет запущен 5 раз с использованием переменных в каждом из текстовых файлов для выполнения задач, определенных в этом сценарии.

Буду признателен за помощь в написании такого сценария.Мой разум работает так, что я должен использовать ls -1 /home/mydir | grep .txt, чтобы получить все txt-файлы, затем извлечь их в массив, а затем выполнить итерацию и выполнить скрипт, но я не эксперт по сценариям оболочки, поэтому мне нужна помощьс синтаксисом.Если бы сценарием оболочки был PHP, для меня это не было бы проблемой, но, увы, это не так.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Способ сделать это в оболочке примерно такой:

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

Но, как я уже упоминал в своем комментарии, вы можете просто написать свой скрипт на PHP.

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

EDIT

Ваш код работает, я только что отредактировал его для вызова сценария оболочки внутри сценария оболочки, что я действительно хотел сделать. Так что приведенный ниже код тоже работает.

#!/bin/bash
for f in /home/dir/*.txt
do
   . "$f"
   . /path/to/setup-shell-script #referenced in B of the original question
done
1 голос
/ 16 сентября 2011

Это то, для чего используется команда . или source в сценариях оболочки; он прочитает содержимое аргумента (файла) и выполнит их. Остерегайтесь людей, заставляющих ваш скрипт использовать файл, который вы не намеревались использовать. Обратите внимание, что оболочка C включает команду source (поддерживается только оболочка Bourne .); Bash обеспечивает оба.

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

Обратите внимание, что если вы напишите:

. mystery_settings_file

оболочка будет искать его, используя $ PATH, но файл должен быть только для чтения (он не должен быть исполняемым). Это может быть весьма полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...