2013-02-05 1 views
0

레코드 세트를 얻고 거기에서 몇 개의 필드를 읽으려고합니다. 필드를 변수에 넣는 방법을 알 수는 없습니다. 스크립트는 다음과 같습니다.Bash 스크립트 : MySQL 쿼리 필드를 변수

#!/bin/bash 
sqlQuery="$(mysql -h host -u user -ppass -D oberonsaas_v2 -s -N -e 
'select ventas.id_venta, 
ventas_entradas.id_ventas_entradas, 
ventas.id_evento, 
id_tarifa, 
DATE_FORMAT(fecha_evento,"%Y%m%d") as fecha, 
TIME_FORMAT(pase,"%H%i") as pase 

from pases,ventas,ventas_entradas,recintos 

where ventas.id_recinto = recintos.id_recinto 
and ventas.id_pase = pases.id_pase 
and ventas.id_venta = ventas_entradas.id_venta 
and recintos.id_cliente = 32 
and ventas.estado="Pagada" 
and date(fecha_venta) = date_add(date(CURRENT_TIMESTAMP),INTERVAL -1 day)')" 
echo $sqlQuery 

$ sqlQuery에서 모든 레코드 세트를 가져옵니다. 그러나 루프를 수행하고 필드를 연결하려고합니다.

+1

출력 예제를 제공 할 수 있습니까? –

+0

이 시점에서 출력은 쿼리의 값입니다. 해당 출력을 포맷하는 필드에 액세스하려고합니다. –

+0

$ sqlQuery에서 에코를 얻는 것이 유용 할 수 있습니다. 결과가 나타나는 방식에 따라 cut, grep 등을 사용하여 구문 분석 할 수 있습니다. – fedorqui

답변

1

그럼 난 몇 가지 출력을 발명 한

#!/bin/bash 

Result="21,336,purchase,tarif_exspensive,Jose" 
(IFS="," 
for i in $Result 
do 
    echo "I Have: " $i 
done 
) 

OUPUT는 가장 간단한 구조로

$ bash t5.sh 
I Have: 21 
I Have: 336 
I Have: purchase 
I Have: tarif_exspensive 
I Have: Jose 
+0

_Inter Field Separator_ ** IFS **를 쉼표로 설정하여 for 루프가 필드 위로 실행됩니다. 하위 셸()에서 수행하므로 부모의 IFS에 영향을 미치지 않습니다. for 루프 이후에 다시 공간으로 설정할 수는 있지만. –

0

축소이다.

sqlQuery=(pases_value ventas_value ventas_entradas_value recintos_value) 

참고 : 당신이처럼 볼 수 있었다 : "("와 ")"배열 사업자 사이

sqlQuery=($(mysql -h host ...) 

새로운 라인입니다 확인

를 착용 할 것 (예를 들어) 떠들썩한 배열로 레코드를 반환

각각은 별개의 sqlQuery 배열 위치에 있습니다. 예 반환 : recintos_value

echo ${sqlQuery[3]} 

CONCAT 모든 :

echo ${sqlQuery[*]} 

가 구분이 관심 있다면 다음 원하는 문자를 정의하는 전환 --delimiter는 MySQL,

set concatValue=${sqlQuery[*]} 

를 사용 다음 구분 문자를 제거하려면 (예 : ",") :

set finalValue=${concatValue//,}