1

我正在使用这个命令:

mysql -u user -ppassword database -e "select distinct entityName,entitySource from AccessControl" 

输出是这样的:

+-----------------------+--------------+
| entityName            | entitySource |
+-----------------------+--------------+
| low                   | Native       |
| high                  | Native       |
| All Groups            | AD           |
| Help Ser vices Group  | AD           |
| DEFAULT_USER_GROUP    | Native       |
| SYSTEM                | Native       |
| DEFAULT_BA_USER_GROUP | Native       |
| soUsersGrp            | Native       |
+-----------------------+--------------+

我的问题是:如何动态创建变量数组来存储值entityNameentitySource?我需要使用的是使用 entityName 和 entitySource 的每个值来更新另一个表。

早些时候我试图将输出存储在一个文件中并使用 awk 访问每一行,但这无济于事,因为一行可能包含多个单词。

4

3 回答 3

1

当然,这是可以做到的。我想支持在 shell 中将 mysql 管道传输到 mysql 的想法很尴尬,但我理解为什么可能需要这样做(例如管道mysql传输到psql什么时候)。

mysql -qrsNB -u user -p password database \
    -e "select distinct entityName,entitySource from AccessControl" | \ 
        while read record; do
            NAME="`echo $record|cut -d' ' -f 1`"       # that's a tab delimiter
            SOURCE="`echo $record|cut -d'   ' -f 2`"   # also a tab delimiter 
            # your command with $NAME and $SOURCE goes here ... 
            COMMAND="select trousers from namesforpants where entityName='${NAME}'" # ...
            echo $COMMAND | mysql # flags ...
        done

标志修剪你的-rs输出,这样你就不必摸索它给你的那个表格,-q要求不缓冲结果,-B要求批处理模式,并-N要求没有列名。

您如何处理这些变量取决于您;可能我会在该循环中编写语句并将它们提供给您的后续流程,而不是担心插值和引号,因为您已经提到您的一些数据中有空格。或者您可以写入/附加到文件,然后将其提供给您的后续流程。

像往常一样,手册是你的朋友。我也将成为你的朋友,但是联机帮助页是这些东西的答案所在。:-)

于 2013-10-24T00:13:48.797 回答
0
#!/usr/bin/env bash
mysql -u user -ppassword database -e "select distinct entityName,entitySource from AccessControl" | while read name source; do
    echo "entityName: $name, entitySource: $source"
done
于 2012-07-26T11:48:18.227 回答
0

请检查一下,我通过exec.

[wcuser@localhost]$ temp=`exec mysql -h10.10.8.36 --port=3306 -uwcuser -pwcuser@123 paycentral -e "select endVersion from script_execution_detail where releaseNo='Release1.0' and versionPrefix='PS'"|tail -1`

[wcuser@localhost]$ echo $temp

19

于 2013-12-20T10:41:09.423 回答