echo Impossible|sed 's/Im/To be /'

June 22, 2008

[tip] Using template rewrite configuration file working with shell.

概要:
設定檔的欄位增刪一直以來是個痛,這會隨著時間的累積而越來越難以處理。寫程式時預先假設變數可能是 空變數給定一個預設值是個好習慣,但變數寫回設定檔,判別可能存在或不存在,移除過期或是新增,這都 讓問題複雜化。Keep simple and stupid,以下提供一個 simple and stupid 的方法供參考。

這是在工作中衍生出來的實戰技巧,只需要確認標準設定檔格式以及變數,以他為範本重建過期 且雜亂無章的設定檔,本機設定的變數可被保留,新增刪除過期變數也可輕易達成。

# 程式
$> cat rebuild_conf.sh
#!/bin/sh
. conf.default
. conf.current

IFS=''
CONF=$(cat conf.default | sed -e '/^[^#]/s/\(^.*\)=.*$/\1=\\"$\1\\"/; /^#/s/"/\\"/g')
eval 'echo ' \"$CONF\" '| cat > conf.rebuild '

# 樣版設定檔,注意新增的欄位
$> cat conf.default
# host area
hostname="AAA2369"
ipaddress="192.168.1.0"

# new add item
new_item="六  6月  7"
new_item1="13:44:11"
new_item2="CST 2008"

# color type : color="yellow|white|black"
#              color_type="mix|remix"
color="yellow"
color_type="mix"

# 在機器上使用已久的設定檔,注意過期跟重複的
$> cat conf.current
hostname="110碼"
ipaddress="10.0.0.1"
color="white"

# this item will be remove.
color_BeRemove="no thing"

color_type="remix"

color="yellow"
color="black"
ipaddress="10.0.0.254"

# 依照樣版重建設定檔,比對新增,及變數值
$> sh rebuild_conf.sh
$> cat conf.rebuild
# host area
hostname="110碼"
ipaddress="10.0.0.254"

# new add item
new_item="六  6月  7"
new_item1="13:44:11"
new_item2="CST 2008"

# color type : color="yellow|white|black"
#              color_type="mix|remix"
color="black"
color_type="remix"

這個技巧重建了設定檔,確保新增的變數可以有值,過期不要的又可以丟棄,本機設定可以保留, 檔案格式美觀可以閱讀。只需在開機或需要時做一次,就可以重建設定檔掌握變數。