1

シェル変数の置換について質問があります。

要件: mysql db に何かを挿入する必要があります。また、メイン シェルに挿入スクリプトを記述したくないため、insert sql スクリプトを変数 $SQL として定義したいと考えています。この変数と他の多くの変数は、sql.cfg という名前の別のファイルに保存されます。

ただし、この変数は別の変数 $Value を参照します。メイン シェルを実行すると、$Value は実際の値に置き換えられます。</p>

例: sql.cfg 内

SQL="insert into table column1,column2 values($Value1,$Value2)"
DB_NAME=dbname
DB_IP=192.168.0.x
USR=username
PWD=password

main.shで

. ./sql.cfg

Value1=100
Value2=200

` mysql $DB_NAME -h$DB_IP -u $USR -p$PWD -se "$SQL;"`

質問:

$sql を $Value1 $Value2 に適切に置き換えて、それらを mysql db に挿入するにはどうすればよいですか?

どうもありがとう!!!

4

1 に答える 1

1

Value1sql.cfgをロード/ソースする前に、Value2 main.shに設定する必要があります

例:

kent$  head *           
==> main.sh <==
#!/bin/bash
Value1=100
Value2=200
source sql.cfg
echo "$DB_NAME - $SQL"



==> sql.cfg <==
#!/bin/bash
SQL="insert into table column1,column2 values($Value1,$Value2)"
DB_NAME=dbname
DB_IP=192.168.0.x
USR=username
PWD=password

kent$  ./main.sh
dbname - insert into table column1,column2 values(100,200)

そして、本当に最初に sql.cfg をロードし、後で main.sh に値を設定したい場合。sql.cfg の $Value1,2 をプレースホルダーとして変更し、main.sh でこれらの値を必要に応じて置き換えることができます。例を参照してください。

kent$  head *
==> main.sh <==
#!/bin/bash
source sql.cfg

Value1=444
Value2=555

SQL=$(sed "s/:Value1/$Value1/g; s/:Value2/$Value2/g" <<<$SQL)

echo "$DB_NAME - $SQL"


==> sql.cfg <==
#!/bin/bash
SQL="insert into table column1,column2 values(:Value1,:Value2)"
DB_NAME=dbname

kent$  ./main.sh
dbname - insert into table column1,column2 values(444,555)
于 2013-01-28T11:04:46.350 に答える