2

我正在编写一个 shell 脚本,输出选定的 MySql 表数据作为练习。使用我的关键词进行的搜索只会显示如何打印出整个 MySql 表,使用不同的语言和不相关的问题来执行此操作。

我的问题:

1)如果可能,我如何从结果中引用某一行的各个属性(例如在遍历具有 PHP 结果的行时进行迭代)?

2)以下两种方法中的哪一种最适合此目的?两者都不像我现在想要的那样工作。


MYSQL="mysql -u$db_user -p$db_passwd $db_name -Nbe"

一种)

RESULT=`$MYSQL "select * from $table_name where can_auto_check='yes';"`
for UNIQUEID in $RESULT
do
    echo "selected: $client $desc "
    someFunction $client $anothervariable
done

二)

$MYSQL "select * from $table_name where can_auto_check='yes';" \
| while read client anothervariable;
do
    echo "selected: $client $desc "
    someFunction $client $anothervariable
done

我的搜索措辞可能不正确;如果是这样的话,如果有人能将我推向正确的方向,我将不胜感激。

谢谢你。

编辑:可能的线索..可能与 awk '{print $1" "$2 }' 有关。但对于每一行。

最终格式 = " mkdir -p /net/$SERVER/$CLIENT/$DESC/someFiles "

4

1 回答 1

1

不错,但更少的代码意味着更少的错误机会。不幸的是,我无法测试我的编辑,因为我没有可用的 mySQL。希望你能明白这一点。(或欢迎其他人测试和编辑这篇文章)。

# unless you need to use ALL_CLIENTS and DESC_FOR_CLIENT later.
#hidden ALL_CLIENTS=

for CLIENT in $($MYSQL "select distinct client from $table_name where can_auto_check='yes'")
do
    #hidden DESC_FOR_CLIENT=
    for DESC in $($MYSQL  "select desc from $table_name where client='$CLIENT'")
    do
         someFunction $CLIENT $DESC
    done
done

如果 CLIENT 或 DESC_FOR_CLIENT 的任何值在其中包含空格,则需要引用您的使用值,例如"$CLIENT".

另一个注意事项:用于命令替换的反引号至少从 1995 年开始就已被弃用(除非您使用的是原始的 unix bourne shell 或 csh,也许是 ash,以及其他一些更晦涩的 shell)。Bash 和 ksh 不需要。用于$( .. cmd ...)您的 cmd 替换。

祝你好运。

于 2012-04-18T05:04:22.770 回答