将mysql结果存储在bash数组变量中

我试图将MySQL结果存储到全局bash数组变量中,但我不知道该怎么做.

我应该将MySQL命令结果保存在一个文件中并在我的for循环中逐行读取文件以进行其他处理吗?

例:

#Database, table uses

user password
Pierre aaa
Paul bbb

命令:

$results = $( MysqL –uroot –ppwd –se  « SELECT * from users );

我希望结果包含两行.

解决方法:

用于将整个表包含到一个bash变量中的Mapfile

你可以试试这个:

mapfile result < <(MysqL –uroot –ppwd –se  "SELECT * from users;")

echo ${result[0]%$'\t'*}
echo ${result[0]#*$'\t'}

要么

for row in "${result[@]}";do
    echo Name:  ${row%$'\t'*}  pass: ${row#*$'\t'}
done

Nota这将正常工作,而行只有2个字段.更多是可能的,但变得棘手

读取逐行读表

while IFS=$'\t' read name pass ;do
    echo name:$name pass:$pass
  done  < <(MysqL -uroot –ppwd –se  "SELECT * from users;")

读取并循环以将整个表保存为许多变量:

i=0
while IFS=$'\t' read name[i] pass[i++];do
    :;done  < <(MysqL -uroot –ppwd –se  "SELECT * from users;")

echo ${name[0]} ${pass[0]}
echo ${name[1]} ${pass[1]}

新的(2018年2月)外壳连接器

一个小工具(github)或我自己的网站:(shellConnector.sh你可以使用:

一些准备:

cd /tmp/
wget -q http://f-hauri.ch/vrac/shell_connector.sh
. shell_connector.sh
newsqlConnector /usr/bin/MysqL '–uroot –ppwd'

以下仅用于演示,跳过测试快速运行

就这样.现在,为demo创建临时表:

echo $sqlIN
3

cat >&3 <<eof
CREATE TEMPORARY TABLE users (
  id bigint(20) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(30), date DATE)
eof
myMysqL myarray ';'
declare -p myarray
bash: declare: myarray: not found

命令myMysqL myarray’;’将发送 ;然后执行内联命令,
但由于MysqL不会解决任何问题,变量$myarray不会存在.

cat >&3 <<eof
  INSERT INTO users VALUES (1,'alice','2015-06-09 22:15:01'),
       (2,'bob','2016-08-10 04:13:21'),(3,'charlie','2017-10-21 16:12:11')
eof
myMysqL myarray ';'
declare -p myarray
bash: declare: myarray: not found

运行测试:

好的,那么现在:

myMysqL myarray "SELECT * from users;"
printf "%s\n" "${myarray[@]}"
1   alice   2015-06-09
2   bob     2016-08-10
3   charlie 2017-10-21

declare -p myarray
declare -a myarray=([0]=$'1\talice\t2015-06-09' [1]=$'2\tbob\t2016-08-10' [2]=$'3\tcharlie\t2017-10-21')

此工具处于构建的早期阶段…您必须在重新使用之前手动清除变量:

unset myarray
myMysqL myarray "SELECT name from users where id=2;"
echo $myarray
bob

declare -p myarray
declare -a myarray=([0]="bob")

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...