Проблема с возвращаемой переменной в bash - PullRequest
3 голосов
/ 20 июля 2011

Эта командная строка mysql возвращает мне: count (*) 19 .Это большая проблема для меня, потому что я просто хочу, чтобы 19 сделал цикл с этим номером.Как я могу это сделать?

var = $(echo "select count(*) from shop_tab where catalog <> '';" | mysql -h abcdcef.com --port=3306 --user=root --password=hbbfe shop)

Ответы [ 3 ]

6 голосов
/ 20 июля 2011

Более простой способ:

var=$(mysql -h abcdcef.com --port=3306 --user=root --password=hbbfe --batch --skip-column-names -Dshop -e "select count(*) from shop_tab where catalog <> ''")

Более того, я предварительно настрою использование функции, чтобы легко добавлять опции в команду MySQL без необходимости изменять весь ваш скрипт.

function MysqlQuery() {
    mysql -h abcdcef.com --port=3306 --user=root --password=hbbfe --batch --skip-column-names -D "$1" -e "$2";
}

va=$(MysqlQuery Shop "SELECT COUNT(*) FROM shop_tab WHERE catalog <> ''")
vaABC=$(MysqlQuery Shop "SELECT COUNT(*) FROM shop_tab WHERE catalog <> 'abc'")
vadef=$(MysqlQuery Shop "SELECT COUNT(*) FROM shop_tab WHERE catalog <> 'def'")
# ...

Я тоже нахожу это более читабельным ...

2 голосов
/ 20 июля 2011

Передайте результат через tail, чтобы отрезать заголовок:

... shop | tail -1)
2 голосов
/ 20 июля 2011

Вы можете использовать awk или cut, чтобы получить второе значение.

awk

var = $(echo "select count(*) from shop_tab where catalog <> '';" | mysql -h abcdcef.com --port=3306 --user=root --password=hbbfe shop | awk '{ print $2 }')

cut

var = $(echo "select count(*) from shop_tab where catalog <> '';" | mysql -h abcdcef.com --port=3306 --user=root --password=hbbfe shop | cut -d' ' -f2)
...