2009-08-28 4 views
3

쉘 스크립트/cron 작업에서 해당 행의 특정 필드에 액세스 할 수있는 동적 행 번호를 반환하는 MySQL 명령을 실행하고 싶습니다. 그런 다음 해당 필드 항목에 대한 추가 명령을 수행하는 과정을 반복하고 싶습니다.쉘 스크립트에서 MySQL 셀 가져 오기

내 두 가지 질문은 다음과 같습니다

  1. 어떻게 쉘 스크립트 변수 (각 행에 이상적으로 단일 셀) 행 집합을 반환합니까?

  2. 필요한 정보를 반환하는 PHP 스크립트를 작성한 다음 쉘 스크립트 변수에 저장할 수 있습니까? 그렇다면 쉘에서 PHP 스크립트를 실행하고 정보를 반환하는 방법은 무엇입니까?

답변

4
echo 'select some_column from some_table' | mysql -uusername -ppassword some_db | tail -n+2 

몇 가지 중요한 일들이 여기에주의를 지불 :

  1. 는 -p와 암호 사이에 공백이있을 수 없습니다. 있을 경우 암호를 입력하지 않았다고 가정하고 대화식으로 입력하라는 메시지를 표시합니다. 주의 : 일부 OS는 다른 사용자가 다른 사용자가 실행중인 명령에 대한 전체 명령 줄을 볼 수있게하므로 -ppassword는 보안상의 위험이 있습니다. 로그인 할 수있는 사용자가 모두 신뢰할 수있는 머신이나 FreeBSD와 같은 이러한 종류의 스누핑을 막는 OS에서만이 작업을 수행하십시오.

  2. "tail"호출은 열 이름 인 첫 번째 출력 행을 무시합니다. 결과는 두 번째 줄에서 시작하여 +2입니다.

  3. "카운트 행"비트는 "some_table에서 개수 선택 (*)"대신에 비슷합니다. 당신이 bash는 모두 유지해야하는 경우

0

쿼리를 실행하고 mysql 클라이언트를 통해 결과를 얻을 것으로 예상처럼 당신은 도구를 사용할 수 있습니다 Expect

그것은 쉘 스크립트 아니지만, 당신은 쉘 스크립트에서 호출 할 수는 구문은 매우 간단하며 예상 사용 방법에 대한 예제가 많이 있습니다.

1

쉘 스크립트 대신 PHP를 사용할 수 있습니까? 쉘 스크립트 대신 cronjob에 /path/to/php mycron.php을 실행하면됩니다.

1

은 또한, 같은 것을 할 수 있습니다 :

mysql -b -e "SELECT one_column FROM tables" | { 
    read 
    while [ ! -z "$REPLY" ] 
    do 
    # do something useful with the $REPLY variable here 
    read 
    done 
} 

(특정 할 것과 더 효율적인 방법이 있음)

또 다른 옵션을 , xargs를 사용하여 :

mysql -b -e "SELECT one_column FROM tables" | xargs usefulcommand 

유용한 명령은 내장 명령 기능을 사용하여 모든 명령 행 인자 nts.

관련 문제