PHP 구성 파일에서 자격 증명을 구문 분석합니다.

PHP 구성 파일에서 자격 증명을 구문 분석합니다.

구성 파일의 데이터를 구문 분석하는 bash 스크립트를 작성하고 싶습니다. 이것을 검색했지만 필요에 맞게 수정할 수 있는 항목을 찾지 못했습니다.

좀라! 구성 파일:

   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"이를 변수에 저장하고 싶습니다 . 모범 사례는 무엇입니까?

답변1

GNU를 사용하면 grep다음과 같은 작업을 수행할 수 있습니다.

user=$(grep -oP "\\\$user.+?'\K[^']+" file)
pass=$(grep -oP "\\\$password.+?'\K[^']+" file)

Perl 호환 정규 표현식을 활성화 -P하면 우리에게 제공됩니다 \K(지금까지 일치하는 항목은 무시). -o"줄에서 일치하는 부분만 인쇄합니다. 그런 다음 다음 항목까지 작은따옴표와 하나 이상의 비문자를 검색합니다 ( 변수 확장 을 피하고 정규 표현식의 일부로 간주되지 않으려면 $var세 개가 필요합니다 ) .\$''

또는 다음을 사용할 수 있습니다 awk.

user=$(awk -F"'" '/\$user/{print $2}' file)
pass=$(awk -F"'" '/\$password/{print $2}' file)

'여기서는 변수 값이 두 번째 필드가 되도록 필드 구분 기호를 설정했습니다 . 이 awk명령은 일치하는 줄의 두 번째 필드를 인쇄합니다.

답변2

예시 입력의 경우:

$ 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}')"
  • grep은 특정 파일에서 사용자 또는 비밀번호 행을 검색합니다.
  • 첫 번째 sed 표현식은 모든 후행 공백을 제거합니다.
  • 두 번째 sed 표현식은 후행 ;
  • awk는 =를 열 구분 기호로 사용하고 두 번째 열을 인쇄합니다.
  • var=$(...)모두 평가하고 출력을 얻은 후 변수에 저장합니다.

답변3

이 파일은 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"

관련 정보