[shell] php를 쉘 스크립터 언어로 사용하기

오늘날 동적 웹 페이지를 개발하는 최고의 언어가 PHP라는 것은 누구나 다 아

는 사실입니다.

하지만 PHP가 쉘 스크립트 언어로도 사용할 수 있다는 것은 모르는 사람이 많

은 것 같습니다.

쉘 스크립트 언어로써의 PHP는 Bash나 Perl만큼 튼튼하지는 않지만 많은 이접

이 있습니다.

PHP를 쉘 언어로 사용하기 위해 요구되는 것은 PHP를 아파치 모듈 대신 CGI 바

이너리로 설치해야 합니다.

보안 문제가 걸려 있기 때문에 PHP메뉴얼의 참고하기 바랍니다.

일반적인 PHP 웹 페이지와 PHP 쉘 스크립트 사이의 단 한가지 차이점은

PHP스크립트의 제일 첫 번째 줄에 다음과 같이 쉘 호출을 해주어야 하는 점입

니다.

#!/usr/local/bin/php -q

-q 옵션은 HTTP헤더를 사용하지 않겠다는 뜻입니다.

또한 PHP태그를 사용해서 스크립트의 시작과 끝을 지정해 주어야 합니다.

<?php  ?> 이제 모든이가 알고 사랑하는 표준 예를 들어봅시다.

#!/usr/local/bin/php -q

<?php

print(“Hello, world!\\n”);

?> 이 코드는 예상하다 시피 화면에 “Hello, world!”를 출력하게 됩니다.

-쉘 스크립트에 매개변수 전달하기(Passing arguments to the shell script)

일반적으로 쉘 스크립트에는 매개변수를 전달 할 수 있어야합니다. 매개변수

를 전달하는 것은 다음과 $argv 배열을 통해서 이루어 집니다.

#!/usr/local/bin/php -q

<?php

    $first_name = $argv[1];

    $last_name = $argv[2];

print(“Hello, $first_name $last_name!  How are you today?\\n”);

?> 즉 이 예제에서는 스크립트로 전달된 두 매개변수를 출력합니다. 이 스크립트

는 다음과 같이 사용될 수 있고

[dbrogdon@artemis dbrogdon]$ scriptname.ph Darrell Brogdon

다음과 같을 출력을 내게 될 것입니다.

Hello, Darrell Brogdon!  How are you today?

[dbrogdon@artemis dbrogdon]$

쉘 스크립트와 웹 페이지에서 $argv 배열의 차이점은 쉘 스크립트의 $argv[0]

은 실행된 스크립트 명이 들어 간다는 점입니다. 웹 페이지에서는 첫 번째 값

($argv[0])은 query 문자열입니다.

-스크립트를 인터액티브하게 만들기(Making a script more interactive)

그러데 어떻게 해야 사용자의 입력을 받아들일 수 있을까요? 어떻게 인터액티

브한 스크립트를 생성할 수 있을까요? PHP는 웹상에서 명령을 읽어오는 함수

는 기본적으로 지원하지 않습니다. 하지만 다음과 같은 PHP 함수를 사용해서

에뮬레이트할 수 있습니다.

주 : 이 함수는 Unix상에서만 동작합니다.

<?php

function read() {

    $fp=fopen(“/dev/stdin”, “r”);

    $input=fgets($fp, 255);

fclose($fp);

    return $input;

}

?> 이 함수는 표준 입력(Linux에서 /dev/stdin)을 의미하는 파일 포인터를 오픈하

고 \\n이나 EOF를 만나거나 255문자까지 읽어 옵니다. 주로 \\n가지 일어오게

될 것입니다. 그런 다음 파일 포인터를 닫고 데이터를 리턴합니다.

이제 앞서든 예제 스크립트를 수정해서 read()함수를 사용해서 사용자 입력을

기다리게 해봅시다

#!/usr/local/bin/php -q

<?php

    function read() {

        $fp=fopen(“/dev/stdin”, “r”);

        $input=fgets($fp, 255);

fclose($fp);

        return $input;

    }

print(“What is your first name? “);

    $first_name = read();

print(“What is your last name? “);

    $last_name = read();

print(“\\nHello, $first_name $last_name!  Nice to meet you!\\n”);

?> 그러나 이 스크립트를 실행하게 되면 마지막 라인에서 한줄로 출력되는 대신

에 세줄로 출력되게 됩니다. 이는 read()함수가 \\n문자까지 취했기 때문입니

다. 이는 read()함수가 데이터를 리턴할 때 \\n을 제거해서 데이터를 리턴하게

하면 해결됩니다.

<?php

function read() {

    $fp=fopen(“/dev/stdin”, “r”);

    $input=fgets($fp, 255);

fclose($fp);

    return str_replace(“\\n”, “”, $input);

}

?> – PHP 쉘 스크립트를 일반 쉘 스크립트에 포함시키기

때때로 PHP쉘 스크립트를 Bash나 다른 쉘 스크립트에 삽입하는 것이 편할 때

도 있습니다. 이는 간단한 트릭으로 가능합니다.

PHP코드를 포함시키는 방법 :

#!/bin/bash

echo This is the Bash section of the code.

/usr/local/bin/php -q << EOF

<?php

print(“This is the PHP section of the code\\n”);

?> EOF

간단하지 않습니까? 변수를 추가하기 전까지는 간단합니다. 다음의 코드 부분

을 실행해 볼까요?

#!/bin/bash

echo This is the Bash section of the code.

/usr/local/bin/php -q << EOF

<?php

    $myVar = “PHP”;

print(“This is the $myVar section of the code.\\n”);

?> EOF

아마 다음과 같은 에러를 발생하게 될 것입니다.

<b>Parse error</b>: parse error in <b>-</b> on line <b>2</b><br> 이를

해결하기 위해서 PHP코드의 $앞에 \\를 붙여 줍니다.

#!/bin/bash

echo This is the Bash section of the code.

/usr/local/bin/php -q << EOF

<?php

    

$myVar = “PHP”;

print(“This is the \\$myVar section of the code.\\n”);

?>

EOF

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.