2011-09-15 2 views
0

J'essaye d'écrire un script Shell Linux pour faire de l'automation sur mon serveur. J'utilise Ubuntu 11.04 en passant.Linux Shell Script pour exécuter un autre script shell en utilisant des variables définies dans plusieurs fichiers texte

Fondamentalement, le processus est le suivant:

R. Je crée plusieurs fichiers texte à l'aide de PHP dans un répertoire (/ home/mydir). Ces fichiers texte sont des stubs d'un script shell et ils contiennent uniquement des définitions de variables. Voici un exemple de ce qui pourrait être dans l'un des fichiers. B. J'ai un script shell d'installation qui fait référence aux variables ci-dessus. Ci-dessous une partie de ce qui peut être dans le script:

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

Je suis en train d'écrire un script shell d'activation qui savoir combien de ces fichiers sont dans le répertoire/home/mydir puis exécutez le programme d'installation script shell pour chacun des fichiers du répertoire. Ainsi, par exemple, si j'ai 5 fichiers avec 5 nom d'utilisateur, mot de passe, etc. le script d'installation sera exécuté 5 fois en utilisant les variables dans chacun des fichiers texte pour compléter les tâches définies dans ce script.

J'apprécierais de l'aide sur la façon d'écrire un tel script. La façon dont mon esprit fonctionne est que je devrais utiliser ls -1 /home/mydir | grep .txt pour obtenir tous les fichiers txt, puis les extraire dans un tableau, puis itérer et exécuter le script, mais je ne suis pas un expert de script shell, donc j'ai besoin d'aide avec le syntaxe. Si le script shell était PHP, cela n'aurait pas été un problème pour moi, mais hélas, ce n'est pas le cas.

Merci d'avance.

+0

Vous savez, vous pouvez utiliser PHP sur la ligne de commande. Je crois que le paquet Ubuntu est "php5-cli". Ensuite, vous pouvez écrire des scripts PHP. – derobert

+0

@Derobert: Oui, je sais, mais j'ai l'intention d'exécuter ce script en utilisant CRON. –

+0

Rien ne vous empêche d'exécuter des scripts PHP à partir de cron. Le script Shell n'est en aucun cas spécial. Mettez la ligne '#!/Usr/bin/php' en haut, chmod + x it, et elle fonctionnera comme n'importe quel autre programme. – derobert

Répondre

2

La façon de le faire dans la coquille est quelque chose comme ceci:

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

Mais comme je l'ai mentionné dans mon commentaire, vous pourriez simplement écrire votre script en PHP.

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

EDIT

Votre code fonctionne, je viens édita pour appeler un script shell dans un script shell, qui est ce que je voulais vraiment faire. Donc, le code ci-dessous fonctionne aussi.

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

Merci. Cela a fonctionné pour moi. Je viens d'éditer le code légèrement –

1

C'est ce que la commande . ou source est destinée aux scripts shell; il va lire le contenu de l'argument (fichier) et les exécuter. Méfiez-vous des personnes qui forcent votre script à utiliser un fichier que vous n'avez pas l'intention d'utiliser. Notez que le shell C inclut la commande source (le shell Bourne uniquement pris en charge .); Bash fournit les deux.

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

Notez que si vous écrivez:

. mystery_settings_file 

la coquille recherchera l'aide PATH $, mais le fichier ne doit être lisible (il n'a pas besoin d'être exécutable). Cela peut être très utile.

Questions connexes