歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> 在sed命令中引入shell變量

在sed命令中引入shell變量

日期:2017/3/1 9:47:26   编辑:SHELL編程

在目前的工作中經常會使用sed命令對游戲區服的配置文件進行版本號的替換,將舊的版本號替換成新的版本號,這裡的版本號都是通過shell變量賦值所得,所以需要在sed語句中引入shell變量。

應用場景解析:

現有各個游戲服的配置文件app.conf.php中有以下字段

'hot_version' => 9, //游戲服每次更新資源的版本號

'hot_update_url' => 'http://cdn.xxx.com/ky1.7.1_9/' //下載資源的CDN地址

每次需要更新游戲資源的時候會從一個新文件hot_version.txt中去讀取新的資源版本號

hot_version:10

每次更新游戲資源的時候,需要更改app.conf.php中的這兩個字段,如將hot_version字段的9改成10,將ky1.7.1_9改成ky1.7.1_10

部分shell腳本內容如下:

version=1.7.1 //游戲服大版本號,每次游戲版本更新需要更改這個號碼

hot_version_old=$(awk '/hot_version/{print $3}' app.conf.php|awk -F"," '{print $1}') //獲取現有的資源版本號碼,存入變量

hot_version_update=$(awk -F":" '{print $2}' hot_version.txt) //獲取新的資源版本號,存入變量

sed -i -e "/hot_version/s/$hot_version_old/$hot_version_update/" -e "/hot_update_url/s/ky$version\_$hot_version_old/ky$version\_$hot_version_update/" app.conf.php //更改版本號

這裡需要注意的是平時我們使用sed -i '/hot_version/s/9/10/' app.conf.php 這種只是替換數字或字符串的情況下使用單引號'即可。但是如果在sed要引入shell變量就需要使用雙引號",並且這裡$version_$hot_version中的短槓是用\轉義的。之前由於沒有加上\將-轉義,多次更新資源版本號的時候CDN資源下載地址那段都沒有替換成功。還有如果是$version.$hot_version的情況,中間的.不需要作轉義。

Copyright © Linux教程網 All Rights Reserved