mysql
  • bash
  • 2012-03-04 202 views 47 likes 
    47

    Me gustaría obtener solo el valor de un resultado de consulta MySQL en un script bash. Por ejemplo, la ejecución del siguiente comando:Cómo recuperar el campo del resultado de la consulta MySQL en bash

    mysql -uroot -ppwd -e "SELECT id FROM nagios.host WHERE name='$host'" 
    

    devuelve:

    +----+ 
    | id | 
    +----+ 
    | 0 | 
    +----+ 
    

    ¿Cómo puedo buscar el valor devuelto en mi escritura del golpe?

    Respuesta

    88

    Uso -s y -N:

    > id=`mysql -uroot -ppwd -s -N -e "SELECT id FROM nagios.host WHERE name='$host'"` 
    > echo $id 
    0 
    

    De the manual:

    --silent, -s

    Silent mode. Produce less output. This option can be given multiple 
        times to produce less and less output. 
    
        This option results in nontabular output format and escaping of 
        special characters. Escaping may be disabled by using raw mode; see 
        the description for the --raw option. 
    

    --skip-columna-nombres, -N

    Do not write column names in results. 
    

    EDITAR

    Parece que -ss funciona tan bien y mucho más fácil de recordar.

    +0

    similares a la respuesta de @ corgi, varias columnas se delimitado por tabuladores. –

    +2

    Para evitar recibir errores como salida, redirija a stderr: 'id = \' mysql -uroot -ppwd -ss -e "SELECCIONE id DE nagios.host DONDE name = '$ host'" 2>/dev/null \ '' –

    +0

    ¿Cómo recuperar varias columnas? – Deckard

    1

    Probar:

    mysql -B --column-names=0 -uroot -ppwd -e "SELECT id FROM nagios.host WHERE name='$host'" 
    

    -B imprimirá resultados usando tabuladores como separadores de columna y

    --column-names = 0 desactivará las cabeceras.

    1

    Intenté las soluciones, pero siempre recibí una respuesta vacía.

    En mi caso, la solución fue:

    #!/bin/sh 
    
    FIELDVALUE=$(mysql -ss -N -e "SELECT field FROM db.table where fieldwhere = '$2'") 
    
    echo $FIELDVALUE 
    
    4

    aún más compacto:

    id=$(mysql -uroot -ppwd -se "SELECT id FROM nagios.host WHERE name=$host"); 
    echo $id; 
    
    Cuestiones relacionadas