簡體   English   中英

動態Shell變量替換

[英]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中設置Value1Value2 ,然后才能加載/提供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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM