从数据库中检索数据并在shell脚本中打印值

时间:2013-02-13 12:45:20

标签: shell

在shell脚本中,我正在从数据库中检索数据并尝试打印它,但它不会打印,因为我正在尝试这样做。

我的代码是:

 mysql -uroot -proot -Dproject_ivr_db -rN --execute "SELECT Regular FROM 
 Fee_MSc WHERE Fee_Type='Total:'" | while read value

 x=1

 do
       echo "V,FeeRegular_$y=$value"
       let "y+=1"
 done

 echo "V,fee_msc_regular="for students on regular basis admission fee 
 including other charges is $FeeRegular_1 and semester fee is $FeeRegular_2""

输出是:

 V,FeeRegular_1=12590
 V,FeeRegular_2=12850

 V,fee_msc_regular=for students on regular basis admission fee including other
 charges is and semester fee is   

它不会在字符串输出中打印$FeeRegular_1$FeeRegular_2的值。

如何在输出字符串中获取这些变量的值?

1 个答案:

答案 0 :(得分:1)

假设有一个类似的shell,当while - 循环存在时,您要创建的变量不存在。这是因为您正在管理结果并使用新环境创建subshell,而新环境不与父shell共享。

您可以使用process substitution将循环重构为for - 循环。不要尝试在变量名的末尾附加数字,而是使用array

#!/bin/bash
i=0
for value in $(mysql -u{$db_user} -p${db_pass} -D${db_name} -rN --execute "
    SELECT Regular FROM Fee_MSc WHERE Fee_Type='Total:' ")
do
    FeeRegular[$i]=${value}
    echo "FeeRegular[$i]=${FeeRegular[$i]}"
    let "i+=1"
done
echo "Found ${#FeeRegular[@]} fees..."
echo "For students on regular basis admission fee including other charges is
${FeeRegular[1]} and semester fee is ${FeeRegular[2]}."

我还建议不要使用root帐户查询数据库,增加密码强度,不发布

现在......你确定你要找的结果是在第1行和第2行吗?您在查询中未指定order by子句。但这是一个单独的问题。