Sponsored Content
Top Forums Shell Programming and Scripting Reading and Writing a conf file - Suggestions and improvements? Post 302927800 by sea on Friday 5th of December 2014 02:14:05 PM
Old 12-05-2014
Reading and Writing a conf file - Suggestions and improvements?

Hello all

As part of my TUI - (line based) Text User Interface, i do have 2 commands to assist working with conf files.
Now, for me they work, but since i wrote them, i automaticly use them they way they should be used... you know what i mean. Smilie

Anyway, they are designed to read 'simple' values, such as words or numbers, maybe a sentence.
However, if there is a 'variable' saved, it shows them, and upon saving it saves it 'as is'.

But this leads to 'shell injection', which i certainly want to avoid here, as i only want the values to be saved or read as is.

The usage is quite simple:
to get a list:
Code:
:) ~ $ tui-conf-get -l /etc/default/grub
GRUB_TIMEOUT
GRUB_DISTRIBUTOR
GRUB_DEFAULT
GRUB_DISABLE_SUBMENU
GRUB_TERMINAL_OUTPUT
GRUB_CMDLINE_LINUX
GRUB_DISABLE_RECOVERY
GRUB_THEME
GRUB_GFXMODE
GRUB_GFXPAYLOAD_LINUX

Read a value:
Code:
✔ ~ $ tui-conf-get /etc/default/grub GRUB_CMDLINE_LINUX
rd.luks.uuid luks-<guid-string> vconsole.font latarcyrheb-sun16 rd.luks.uuid luks-<guid-string> $([ -x /usr/sbin/rhcrashkernel-param ] && /usr/sbin/rhcrashkernel-param || :)✔ ~ $ 

or
Code:
+ ~ $ tui-conf-get /etc/default/grub GRUB_THEME
/boot/grub2/themes/circled-nasa-horizon/theme.txt:) ~ $ 

Write a value:
Code:
✔ ~ $ sudo tui-conf-set /etc/default/grub GRUB_THEME /boot/grub2/themes/circled-nasa-capsule/theme.txt
:) ~ $ tui-conf-get /etc/default/grub GRUB_THEME
/boot/grub2/themes/circled-nasa-capsule/theme.txt+ ~ $

The 'core' of tui-conf-get:
Code:
...
	[[ -z "$2" ]] && printf "$help_text" && exit $RET_HELP
	while getopts "ilh" name
	do 	case $name in
		i)	OPT="-i"
			;;
		l)	grep -v ^# "$2"|grep "="|sed s,"="," ",g|awk '{print $1}'
			exit 0
			;;
		h)	printf "$help_text"
			exit $RET_HELP
			;;
		esac
	done
	shift $(($OPTIND - 1))
	CONFFILE="$1"
	VARNAME="$2"
	[[ ! -f "$CONFFILE" ]]  && echo "$CONFFILE dont exist?" "$TUI_FAIL" && exit 1
#
#	Display & Action
#
	VALUE=$(grep $OPT "${VARNAME}=" "$CONFFILE"|grep -v ^#|sed s,'"','',g|sed s,'=',' ',g) > /dev/zero
	VALUE="${VALUE:${#VARNAME}+1}"
	printf "$VALUE"

The core of tui-conf-set is a bit more complex, as i want to preserve existing quotes of the value, without the user needing to add them again. Also there is specialy handling according to chars within the value-string to be saved, if there is a coma, back-/slash, whatsoever, and change the Sed-Divider (SD) accordingly.
Code:
#
# 	Preformat strings
#
	SEARCH="$(grep $OPT "${VARNAME}=" "$CONFFILE"|grep -v ^#|tr -d [:space:])"
	$SMALL && VARNAME="${VARNAME,,}"
	$CAPS  && VARNAME="${VARNAME^^}"
	printf  "$SEARCH"|grep -q "\"" && \
		REPLACE="$VARNAME=\"$VALUE\"" || \
		REPLACE="$VARNAME=$VALUE"
	# Set proper SED 'divider'
	SD=","
	if echo "$REPLACE"|grep -q "$SD"
	then 	# Coma was found
		SD="/"
		printf "$REPLACE"|grep ","|grep "$SD"|grep -q '\\' && SD="\\"	# backslash was found
		[[ ! "$SD" = "/" ]] && \
			printf "$REPLACE"|grep ","|grep "$SD"|grep -q "/" && SD="|"	# Forward slash was found
	fi
	# Troubles with VARIABLES due to leading '$'
	printf "$SEARCH"|grep -q "\$" && \
		SEARCH="$(printf "$SEARCH"|sed s,'\$','\\\$',g)" && \
		hadDollar=true
	# FORUM EDIT: This was required to escape dollar signes, so they are not 'executed' or read
#
#	Display & Action
#
	# Generate the command
	cmd="$(which sed) s${SD}'${SEARCH}'${SD}'${REPLACE}'${SD}g -i \"$CONFFILE\""
	# Save changes
	if ! grep -q "$VARNAME" "$CONFFILE"
	then	# Its not there yet, just append it
		printf "${REPLACE}\n" >> "$CONFFILE"
	elif $hadDollar
	then	# FORUM EDIT: This is required to remove the escaped dollar signed, so the dollar sign is saved and not its (the variables) value.
	eval "$cmd"
	else	$cmd
	fi
	#
	# Return true if replaced string was found
	# This is required, since using RET=$? returned true eventhough value was not saved...
	grep -q "$REPLACE" "$CONFFILE"

Any suggestions?

To be complete, i add the full scripts as attachments, and inform you that to use sudo tui-conf-set CONFIG VARIABLE VALUE tui-conf-set must be located in either /bin or /sbin, $HOME/bin will not work unless you use: sudo $(which tui-conf-set)
As they are part of a package, they originaly do not have the .sh extension, that has been added to attach them here.

Thank you in advance

Last edited by sea; 12-05-2014 at 10:25 PM.. Reason: typo
This User Gave Thanks to sea For This Post:
 

10 More Discussions You Might Find Interesting

1. Programming

Reading and Writing file on LAN

Hi gurus I am not a C programmer but I need to read and write files on a computer on LAN using IP address. Suppose on a computer that has an IP 192.168.0.2 Any help or code example. I did in JAVA using URL, but do not know how to do in ANSI-C. In java: ------- URL url = new... (3 Replies)
Discussion started by: lucky001
3 Replies

2. UNIX for Dummies Questions & Answers

reading ,writing,appending ,manipulating a file.

Hi my prob statement is to create a new file or to append to the 1tst file the followign chages. File 1: txt file. portfolio No a b c d abc 1 Any Any Any charString cds 2 values values values charString efd 3 can can can charString fdg 4 come come come charString... (4 Replies)
Discussion started by: szchmaltz
4 Replies

3. UNIX for Dummies Questions & Answers

Log File Writing and Reading

Hi all, I have the following shell script code which tries to sftp and writes the log into the log file. TestConnection () { echo 'Connection to ' $DESTUSERNAME@$DESTHOSTNAME $SETDEBUG if ]; then rm $SCRIPT ; fi touch $SCRIPT echo "cd" $REMOTEDIR >> $SCRIPT echo "quit" >>... (10 Replies)
Discussion started by: valluvan
10 Replies

4. Programming

I need help with file reading/writing in C

Hello everybody, I'm trying to code a program which makes the following: It sends an ARP request frame and when it gets the reply, extracts the IP address of source and writes it to a .txt file. This is gonna be done with many hosts (with a for() loop), so, the text file would look like... (2 Replies)
Discussion started by: Zykl0n-B
2 Replies

5. Shell Programming and Scripting

Reading data from DataBase and Writing to a file

Hi All, Please help me in writing data to a file in one row. In database there is a column which contains large data which does not fit in the file in one row. The column contains list of paths. I want to write these paths to a file in one row. Please find the code below writes : ... (2 Replies)
Discussion started by: rajeshorpu
2 Replies

6. Shell Programming and Scripting

Searching for Log / Bad file and Reading and writing to a flat file

Need to develop a unix shell script for the below requirement and I need your assistance: 1) search for file.log and file.bad file in a directory and read them 2) pull out "Load_Start_Time", "Data_File_Name", "Error_Type" from log file 4) concatinate each row from bad file as... (3 Replies)
Discussion started by: mlpathir
3 Replies

7. Programming

unexpected values received when writing and reading from file

In the code below i try to write and read from a file, but i get unexpected results, like after writing i cannot open the file, and when reading the file the value entered earlier is not shown bool creat_fragments(int nFragment) { int fd, rand_value; char frag_path, buf; for(int... (8 Replies)
Discussion started by: saman_glorious
8 Replies

8. Shell Programming and Scripting

reading a file extracting information writing to a file

Hi I am trying to extract information out of a file but keep getting grep cant open errors the code is below: #bash #extract orders with blank address details # # obtain the current date # set today to the current date ccyymmdd format today=`date +%c%m%d | cut -c24-31` echo... (8 Replies)
Discussion started by: Bruble
8 Replies

9. Shell Programming and Scripting

Reading and writing in same file

Hi All, Here is my requirement. I am grepping through the log files and cutting some fields from the file to generate a csv file. Now I have to check if 2nd field is having some fixed value then with the help of 4th field I have to look in same log and run another grep command to retrieve the... (11 Replies)
Discussion started by: kmajumder
11 Replies

10. Shell Programming and Scripting

Suggestions on quality reading

I try to search and read about bash scripting. So far Ive read a few of these: The Beginner Guide to Writing Linux Shell Scripts BASH Programming - Introduction HOW-TO An A-Z Index of the Bash command line for Linux. unix help but I am a visual person that learns from repetition and errors.... (1 Reply)
Discussion started by: graphicsman
1 Replies
All times are GMT -4. The time now is 10:46 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy