2011-09-15 5 views
0

私は自分のサーバーでいくつかの自動化を行うLinuxシェルスクリプトを作成しようとしています。私はUbuntu 11.04を使っています。次のようにLinuxシェル複数のテキストファイルに定義された変数を使用して別のシェルスクリプトを実行するスクリプト

基本的には、プロセスは次のとおりです。

A.私は、ディレクトリ(/ホーム/ MYDIR)でPHPを使用して、複数のテキストファイルを作成します。これらのテキストファイルは、シェルスクリプトのスタブであり、変数定義のみを含んでいます。ここには、ファイルの1つに含まれる可能性のあるサンプルがあります。

B.私は、上記の変数を参照するセットアップシェルスクリプトを持っています。私はセットアップを実行して/ホーム/ mydirの中でどのようにこれらのファイルの多くを見つけるでしょう、起動シェルスクリプトを記述し、しようとしている

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

:下記のスクリプトであってもよいものの一部でありますディレクトリ内の各ファイルのシェルスクリプト。たとえば、5つの異なるユーザー名、パスワードなどを含む5つのファイルがある場合、セットアップスクリプトは、このスクリプトで定義されたタスクを完了するために各テキストファイルの変数を使用して5回実行されます。

このようなスクリプトを書く方法については、私は助けていただきたいと思います。私の考え方は、ls -1 /home/mydir | grep .txtを使用してすべてのtxtファイルを取得し、配列に展開してからスクリプトを繰り返し実行する必要がありますが、シェルスクリプトのエキスパートではないので、構文。シェルスクリプトがPHPだった場合、それは私には問題ではありませんでしたが、残念ながらそうではありません。

ありがとうございます。

+0

あなたは、コマンドラインでPHPを使用できます。私はUbuntuパッケージが 'php5-cli 'だと信じています。その後、PHPスクリプトを書くことができます。 – derobert

+0

@Derobert:はい、私は知っていますが、私はCRONを使ってこのスクリプトを実行する予定です。 –

+0

cronからPHPスクリプトを実行することはありません。シェルスクリプトは決して特別なものではありません。 '#!/ usr/bin/php'行を一番上に置き、chmod + x itとすると、他のプログラムと同様に実行されます。 – derobert

答えて

2

シェルでこれを行う方法は次のようなものです:

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 
+0

ありがとうございます。これは私のために働いた。私はわずかにコードを少し編集しました –

1

これは、.またはsourceコマンドがシェルスクリプトで使用するコマンドです。引数(ファイル)の内容を読み込んで実行します。あなたが使用する予定のないファイルを使用するようにスクリプトを強制する人には注意してください。 Cシェルにはsourceコマンドが含まれています(Bourneシェルは.のみサポートされています)。 Bashは両方を提供します。

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

あなたが書いた場合ことに注意してください:

. mystery_settings_file 

シェルは、$ PATHを使用して、それを検索しますが、ファイルは(それが実行可能である必要はありません)読めるなければなりません。これは非常に便利です。

関連する問題