3

This mysql command line return me: count(*) 19. It's a big problem for me because I just want 19 to make a loop with this number. How can I do?

var = $(echo "select count(*) from shop_tab where catalog <> '';" | mysql -h abcdcef.com --port=3306 --user=root --password=hbbfe shop)
Lightness Races in Orbit
  • 378,754
  • 76
  • 643
  • 1,055
user420574
  • 1,437
  • 5
  • 21
  • 33

3 Answers3

6

An easier way is :

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

Moreover, I'll preconize the use of function in order to easily add options to the MySQL command without having to modifying all your script.

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'")
# ...

I find this more readable too...

Arnaud F.
  • 8,252
  • 11
  • 53
  • 102
2

You can use awk or cut to get second value.

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)
gpojd
  • 22,558
  • 8
  • 42
  • 71
2

Pipe the result through tail to cut off the header:

... shop | tail -1)
Aaron Digulla
  • 321,842
  • 108
  • 597
  • 820