[英]Dynamic Shell Variable substitution
我有一個關於Shell變量替換的問題。
要求:我需要向mysql db插入一些內容。我不想在主外殼中編寫插入腳本,因此我想將插入sql腳本定義為變量$ SQL。 此變量和許多其他變量存儲在另一個名為sql.cfg的文件中
但是此變量將引用另一個變量$ Value。 當我執行主shell時,$ Value將被實際值替換。
示例:在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數據庫中?
非常感謝!!!
您必須在main.sh中設置Value1
, Value2
,然后才能加載/提供sql.cfg
例:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.