0

シェルスクリプトでは、データベースからデータを取得して印刷しようとしていますが、印刷しようとしても印刷されません。

私のコードは次のとおりです。

 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文字列出力に出力しません。

出力文字列でこれらの変数の値を取得するにはどうすればよいですか?

4

1 に答える 1

1

のようなシェルを想定すると、作成しようとしている変数は -loop が存在する場合には存在しませんwhile。これは、結果をパイプして、親シェルと共有されていない新しい環境でサブシェルを作成しているためです。

プロセス置換forを使用して、ループをループに再構築できます。変数名の末尾に数値を追加するのではなく、配列を使用してください。

#!/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]}."

また、データベースのクエリにルート アカウントを使用しないこと、パスワードの強度を高め、パスワードを公開しないことをお勧めします

さて...探している結果が行 1 と行 2 にあることを確認しますか? order byクエリに句が指定されていません。しかし、それは別の問題です。

于 2013-02-13T20:23:37.400 に答える