在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
的值。
如何在输出字符串中获取这些变量的值?
答案 0 :(得分:1)
假设有一个类似bash的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
子句。但这是一个单独的问题。