2012-03-04 30 views
47

Tôi muốn chỉ nhận giá trị của kết quả truy vấn MySQL trong tập lệnh bash. Ví dụ như cách chạy lệnh sau:Cách lấy trường từ kết quả truy vấn MySQL trong bash

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

lợi nhuận:

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

Làm thế nào tôi có thể lấy giá trị trả lại trong kịch bản bash của tôi?

Trả lời

88

Sử dụng -s-N:

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

Từ 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-cột-tên, -N

Do not write column names in results. 

EDIT

Hình như -ss công trình như tốt và dễ dàng hơn để nhớ.

+0

Tương tự như câu trả lời @ Corgi của, nhiều cột sẽ được phân định tab. –

+2

Để tránh bị lỗi như đầu ra, chuyển hướng stderr: 'id = \' mysql -uroot -ppwd -ss -e "CHỌN id TỪ nagios.host WHERE name = '$ host'" 2>/dev/null \ '' –

+0

Cách tìm nạp nhiều cột? – Deckard

1

Hãy thử:

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

-B sẽ in kết quả sử dụng tab để tách các cột và

--column-names = 0 sẽ vô hiệu hóa các tiêu đề.

1

Tôi đã thử các giải pháp nhưng luôn nhận được phản hồi trống.

Trong trường hợp của tôi là giải pháp là:

#!/bin/sh 

FIELDVALUE=$(mysql -ss -N -e "SELECT field FROM db.table where fieldwhere = '$2'") 

echo $FIELDVALUE 
4

Thậm chí More compact:

id=$(mysql -uroot -ppwd -se "SELECT id FROM nagios.host WHERE name=$host"); 
echo $id; 
Các vấn đề liên quan