【发布时间】:2011-02-18 07:52:43
【问题描述】:
我在 shell 脚本中写入函数以从/向文件读取和写入变量设置。我想知道是否有更清洁的方法来做到这一点。我特别不喜欢删除现有匹配以进行写入然后在文件末尾重写的位。有一个更好的方法吗?谢谢。
fnReadTestSetting()
{
#$1 is the variable to be read from the testsettings.ini file
grep $1 $MAIN_FOLDER/testsettings.ini >$MAIN_FOLDER/temp.ini
if [ $? -eq 0 ]; then
sed -i "s|$1=||" $MAIN_FOLDER/temp.ini
TEST_VALUE=`cat $MAIN_FOLDER/temp.ini`
export $1=$TEST_VALUE
fi
rm $MAIN_FOLDER/temp.ini
return
}
fnWriteTestSetting()
{
#$1 is the variable and value to be written to the testsettings.ini file in the format VARIABLE_NAME=VALUE
if [ ! -e $MAIN_FOLDER/testsettings.ini ]; then
touch $MAIN_FOLDER/testsettings.ini
fi
SETTING_NAME=`echo $1 | awk -F = '{print $1}'`
grep $SETTING_NAME $MAIN_FOLDER/testsettings.ini &>/dev/null
if [ $? -eq 0 ]; then
sed -i "/^$SETTING_NAME/d" $MAIN_FOLDER/testsettings.ini
echo "$1" >> $MAIN_FOLDER/testsettings.ini
else
echo "$1" >> $MAIN_FOLDER/testsettings.ini
fi
return
}
【问题讨论】:
-
您可能希望使用
${string#substring}从$string前面去除$substring的最短匹配,而不是生成awk以去除VARIABLE=位;这里有一些小细节:tldp.org/LDP/abs/html/refcards.html -
我试过这个来阅读:LINE=
grep $1 testsettings.ini;键=$1"=";价值=${LINE#$KEY};出口 $1=$VALUE;但是当我将 IP 传递给函数时它失败了,其值 IP_ADDRESS=10.0.0.1 写入 testsettings.ini