bash - How do I improve my logic to read and write variable values to a file? -
i wrote functions in shell script read , write variable settings from/to file. wondering if there cleaner way this. don't bit delete existing match write , rewrite @ end of file. there better way this? thanks.
fnreadtestsetting() { #$1 variable read testsettings.ini file grep $1 $main_folder/testsettings.ini >$main_folder/temp.ini if [ $? -eq 0 ]; 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 variable , value written testsettings.ini file in format variable_name=value if [ ! -e $main_folder/testsettings.ini ]; 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 ]; sed -i "/^$setting_name/d" $main_folder/testsettings.ini echo "$1" >> $main_folder/testsettings.ini else echo "$1" >> $main_folder/testsettings.ini fi return }
i have made improvements:
you can use single sed reading setting. saves writing tmp file. not sure why trying export $1.
fnreadtestsetting() { #$1 variable read testsettings.ini file sed -n "s/^$1=\(.*$\)/\1/p" $main_folder/testsettings.ini }
for writing, don't need touch file if doesn't exist, because created anyway. don't need awk finding setting name. can place grep condition in if-statement instead of explicitly checking exit code. use single sed replacement (instead of deleting , echoing).
fnwritetestsetting() { #$1 variable , value written testsettings.ini file in format variable_name=value setting_name=${1%%=*} if grep -sq "^${setting_name}=" $main_folder/testsettings.ini sed -i "s/^${setting_name}=.*$/$1/" $main_folder/testsettings.ini else echo "$1" >> $main_folder/testsettings.ini fi return }
update:
%%=*
deletes after =
. more info on %%
operator take @ string manipulation guide:
${string%%substring}
deletes longest match of $substring of $string.
Comments
Post a Comment