設定ファイルのデータを解析するbashスクリプトを書きたいのですが。私はこれを検索しましたが、自分のニーズに合うように変更できるものを見つけることができませんでした。
Joomla!設定ファイル:
public $access = '1';
public $debug = '0';
public $debug_lang = '0';
public $dbtype = 'mysqli';
public $Host = 'localhost';
public $user = 'template';
public $password = 'template';
public $db = 'template_druha';
public $dbprefix = 'dsf1i_';
public $live_site = '';
public $secret = '2w9gHzPb4HfAs2Y9';
public $gzip = '0';
public $error_reporting = 'default';
"$user"
および"$password"
の行のデータベース資格情報を解析し、それらを変数に格納したいと思います。ベストプラクティスは何ですか?
GNU grep
を使用すると、次のことができます。
user=$(grep -oP "\\\$user.+?'\K[^']+" file)
pass=$(grep -oP "\\\$password.+?'\K[^']+" file)
-P
は、Perl互換の正規表現を有効にします。これにより\K
が得られます(これまでに一致したものはすべて無視してください)。 -o
は、「行の一致する部分のみを出力することを意味します。次に、$var
(変数の展開を回避し、\
が正規表現の一部として使用されないようにするために3つの$
が必要です)、1つの引用符と1つまたは次の'
まで、より多くの非'
文字。
または、awk
を使用することもできます。
user=$(awk -F"'" '/\$user/{print $2}' file)
pass=$(awk -F"'" '/\$password/{print $2}' file)
ここでは、フィールド区切り文字を'
に設定しているため、変数の値は2番目のフィールドになります。 awk
コマンドは、一致する行の2番目のフィールドを出力します。
このファイルはPHPファイルであるため、データを抽出する最も信頼できる方法は、PHPで解析することです。シェルスクリプトでデータを使用する必要がある場合は、シェル構文で変数の割り当てを出力するPHPコードを記述します。
#!/bin/sh
eval "$(php -r '
include $argv[1];
$config = new JConfig();
echo "joomla_user=\x27" . preg_replace("/\x27/", "\x27\\\x27\x27", $config->user) . "\x27\n";
echo "joomla_password=\x27" . preg_replace("/\x27/", "\x27\\\x27\x27", $config->password) . "\x27\n";
' /path/to/configuration.php)"
echo "User is $joomla_user"
サンプル入力の場合:
_$ cat /tmp/foo
public $access = '1';
public $debug = '0';
public $debug_lang = '0';
public $dbtype = 'mysqli';
public $Host = 'localhost';
public $user = 'template-user';
public $password = 'template-pass';
public $db = 'template_druha';
public $dbprefix = 'dsf1i_';
public $live_site = '';
public $secret = '2w9gHzPb4HfAs2Y9';
public $gzip = '0';
public $error_reporting = 'default';
_
あなたができること:
_user="$(grep '$user' /tmp/foo | sed -e 's/ *$//g' -e 's/;$//' | awk -F= '{ print $2}')"
pass="$(grep '$password' /tmp/foo | sed -e 's/ *$//g' -e 's/;$//' | awk -F= '{ print $2}')"
_
var=$(...)
はそれらすべてを評価し、出力を取得して変数に格納します