2013-07-11 101 views
0

我有以下內容的文件shell腳本:更換內容

文件名:VersionInfo.properties

Installed Version:13.7.0-2 
Previous Version:13.6.0-12 

文件名:main.sh

#!/bin/ksh 
new_maj_version=$1 # sample content: 13.7.0 
new_min_version=$2 # sample content: 4 

每當我運行我的main.sh我希望它編輯我的VersionInfo.properties文件。已安裝的版本應該轉移到以前的版本,我的new_maj_version和new_min_version將被置於已安裝的版本。我怎樣才能實現它?運行我main.sh後

樣本輸出

文件名:VersionInfo.properties

Installed Version:13.7.0-4 
Previous Version:13.7.0-2 

回答

1

試試這個:(保存到您main.sh):

#!/bin/ksh 
awk -F: -v a="$1" -v i="$2" 'NR==1{n=$2;print $1":"a"-"i;next}{print $1":"n}' /VersionInfo.properties > /tmp/tmpVersion && mv /tmp/tmpVersion VersionInfo.properties 

試用

main.sh "13.7.0" "4" 
+0

它的工作。現在我有了rollback.sh文件,其中版本號硬編碼爲'uninstall_rpm ClientInfrastructure 13.6.0-12'。我怎樣才能讓這個回滾腳本在'VersionInfo.properties'中選擇'Previous Version'而不是硬編碼呢? – Jill448

+0

你的「rollback.sh」問題沒有清楚地描述。什麼是硬編碼?在執行rollback.sh之後,會發生什麼?哪裏來的部分'uninstall_rpm ClientInfrastructure'?我忍不住進一步。抱歉。這個答案是針對你目前的問題。如果它解決了你的問題,我很高興。 – Kent

+0

你的答案解決了我的intial問題。如果你想解決其他問題,請看看http://stackoverflow.com/questions/17597901/shell-script-replace-contents – Jill448

0

這應該做的伎倆

sed -e "/Installed Version/{s/Installed Version:\(.*\)/Installed Version:$major_version-$minor_version\nPrevious Version:\1/; n}" -e '/Previous Version/{d}' 
VersionInfo.properties 
+0

它只做了一次。第二次它沒有移動我的安裝版本到以前的版本。 main.sh「13.7.0」「4」 安裝版本:13.7.0-4 上一個版本:13.6.0-12 (第二次再次運行)main.sh「13.7.0」「9」 安裝版本:13.7.0-9 上一個版本:13.6.0-12' – Jill448

+0

@ sravs448,它適合我。請注意,上面的命令將更新的版本寫入標準輸出,您需要添加管道以更新原始的'VersionInfo.properties'。只要您不斷更新'$ major_version'和'$ minor_version',這將繼續適用於後續運行 – iruvar