2017-12-07 5 views
0

特定のディレクトリに対してDB引数を必要とするPHPスクリプトを実行する動的cronジョブを作成しようとしています。2つのforループを結合するBash

出力は次のようになります。私は、次しまっ

/usr/bin/php /var/www/html/test.php db_test 

#!/bin/bash 
    DIR="/var/www/html/*" 
    PHP="/usr/bin/php" 
    ACCOUNTS=$(ls -d $DIR) 
    DBPREFIX="db_" 
    DB=$(find /var/www/html/ -mindepth 1 -maxdepth 1 -type d | awk -F'/' '{print $5}') 

    for CUSTOMER in $ACCOUNTS 
    do 
      echo $PHP $CUSTOMER $DBPREFIX$DB 
    done 

これは、次の出力:

/usr/bin/php /var/www/html/test.php db_test test2 test3 test4 

問題をDBPREFIXとDB VARSが必要だということですまた、私はすべての単一のデータベースの完全なコマンドを取得するループをトラフに行く。

どうすればできますか?

+0

プライベート変数に大文字を使用しないでください。大文字の変数名は、システムで使用するために予約されています。 – tripleee

+0

そして、PHPへのパスをハードコーディングするだけで愚かです。必要ならば 'PATH'を修正しますが、必要に応じてユーザがシステムの場所を上書きできるようにしてください。 – tripleee

+0

Annnnd [スクリプトで' ls'を使わないでください](http:// mywiki.wooledge.org/ParsingLs)。 – tripleee

答えて

1

あなたはおそらくずっと同じことを達成するためにfind -printf "..."ようなものを使用することができますが、find-printfオプションはGNUの拡張である

for dir in /var/www/html/*/; do 
    base=${dir#/var/www/html/} 
    db=${base%/} 
    echo php "$db" "db_$db" # or maybe php "${dir%/}" "db_$db"? 
done 

のような何かを探しているように見えます。

+0

ありがとう、私が探していたことをありがとうございました。 varベースとdbが何をしているのか説明できますか? –

+0

私は '$ {var#prefixtoremove}'と '$ {var%suffixtoremove}'の後ろにスラッシュを入れてディレクトリ名を破棄しています。 – tripleee

+0

詳細については、[パラメータの拡張](http://wiki.bash-hackers.org/syntax/pe#substring_removal)を参照してください。 – PesaThe

関連する問題