2012-04-19 57 views
0

這是第一次使用shell腳本(#!/ bin/sh),我一直在通過它閱讀教程等工作但是我被困在一個關鍵的這個讀寫值..

我試着在密鑰來讀取=從表單的配置文件值對

key1_begin=abc 
key1_end=def 

key2_begin=123 
key2_end=jkl 

.. and so on 

我想用戶的參數傳遞如腳本

something.sh 1 x y z 

其中第一個參數將用作用於修改相應鍵的那個參數。所以之後我已經檢查目錄是否存在以及該文件是否存在我使用

source config.cfg 

我然後用1 ID = $保存ID,並使用

echo key${ID}_begin 

所以讀來獲得訪問鍵源它關鍵的價值將是

echo key${ID}_begin = $[key${ID}_begin] 

,我希望得到「key1_begin = ABC」,而是不斷收到「key1_begin = 0」。然而,同樣的命令似乎對數字起作用。例如,使用ID爲2的這個命令給出「key2_begin = 123」

有人可以請指出我正確的方向,爲什麼這對數字而不是字母正常工作?

我該如何改變變量的值?我目前使用的「EVAL」,但是這一次似乎只與數字工作

[ ! -z $2 ] && eval key${ID}_end=$3 

真的很感激任何意見/指針與此有關。\

謝謝

+0

如果你希望能夠只使用bash的語法(而不是寫POSIX SH) ,即使'/ bin/sh'是'/ bin/bash'的符號鏈接,你應該用'#!/ bin/bash'而不是'#!/ bin/sh'開始你的腳本,它會禁用當調用「/ bin/sh」時,非POSIX擴展的數量。 – 2012-05-17 21:09:57

回答

0

你很可能將不得不使用中介變量:

key1_begin=abc 
var="key${ID}_begin" 
echo "$var=${!var}" 
+0

謝謝你和諾西德。我現在使用KEY = key $ {ID} _begin並讀取echo $ KEY = $ {!KEY}並寫入eval $ {KEY} = $ 2。 – rb20 2012-04-19 08:12:41

+0

@ rb20 eval打開自己的安全漏洞 - 而不是使用它,考慮在http://mywiki.wooledge.org/BashFAQ/006給出的方法 – 2012-05-17 21:10:38

0

正如本(假定的bash):

#! /bin/sh 
ID=2 
source mychild.sh 
keyid="key${ID}_begin" 
echo "key${ID}_begin = ${!keyid}" 

總之,在bash,你可以

var=${!i} 

或者其他殼:

var=`eval echo \$$i`