2017-07-18 92 views
0

我想創建一個bash腳本來更改應用程序的配置文件。該腳本將讀取一個變量並將要更改的設置的值替換爲變量值。在bash腳本中用變量替換字符串

#!/bin/bash 
mysqlurlenv1="jdbc:mysl://xx.xx.xx.xx:3306 
mysqlurlenv2="jdbc:mysl://xx.xx.xx.xz:3306 
configFile=app.conf 
pattern=$1 


case "$pattern" in 

    1) 
      sed -i.bak "s/^\(mysql.db.url =\).*/\1 ${mysqldburl_env1}/" 
      ;; 
    2) 
      sed -i.bak "s/^\(mysql.db.url =\).*/\1 ${mysqldburl_env2}/" 
      ;; 
    *) 
      echo "Wrong input...try again" 

    esac 

我有以下項

mysql.db.driver = com.mysql.jdbc.Driver 
mysql.db.url = jdbc:mysql.... 
mysql.db.uname = admin 

一個配置文件,當我跑我得到這個錯誤 的sed腳本:-e表達式#1,焦炭40:未知的選項爲'S'

如何在配置文件中獲取那些已定義的變量?任何幫助將讚賞

RGDS 聲浪

+0

你真不該使用的sed像這樣的擴展型變量。你所引用的變量有/參考也被sed用作分隔符,因此sed錯誤。 –

+0

前兩個變量未終止。 – tarsis

回答

0

您正在使用這個sed的模式s/FIND_STRING/REPLACE_STRING,那就是做它的常用方法。

但是你REPLACE_STRING包含/,所以你的模式將成爲s/FIND_STRING/jdbc:mysl://....,這是無效的,因爲它包含了太多/

Sed接受任何字符作爲字段分隔符,所以在您的情況下,您需要將/中的sed pattern分隔符更改爲其他內容,例如|

例子:

$ mysqlurlenv1="jdbc:mysl://xx.xx.xx.xx:3306" 
$ echo "mysql.db.url = jdbc:mysql" | sed "s|^\(mysql.db.url =\).*|\1 ${mysqlurlenv1}|" 
mysql.db.url = jdbc:mysl://xx.xx.xx.xx:3306