How to walk through a config file with /bin/sh


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to walk through a config file with /bin/sh
# 1  
Old 08-26-2009
How to walk through a config file with /bin/sh

Hi there,

i tried a lot of things actually to get my script running as expected.

Situation:
I have a config file with several parameters in the form
Code:
     FFF.thisIsaParam=Value
     FFF.included.AnotherPortofParam=Value

Additionally there are some comments in it.

Script should be in traditional /bin/sh

running a for-loop works as long as I filter out the commented lines, which i not what I need.
Going for a "while read line" statement does print the comments and writes them to the tempfile but I'm not able to enter/modify the values param by param, as the additional read statement is beeing "ignored".

The easiest way would be some kind of array, but I didn't got it working so far. Is there another way to get this working?

Thanks and regards,
Stefan

Last edited by zaxxon; 08-26-2009 at 09:15 AM.. Reason: code tags
# 2  
Old 08-26-2009
Please post an example of your input and the desired output. When doing so use [code] and [/code] tags to enhance readability and to preserve formatting like indention etc., ty.
# 3  
Old 08-26-2009
Hi again,

no problem. Here are the first lines of the properties file which is the input:

Code:
#--------------------Common WebMAX Service Settings--------------------
Max.defBpId=CH999148
Max.env=T
Max.exceptionFile=exception.txt
Max.fileRoot=/opt/SISwebMAX/webmaxTest/Service
Max.logRoot=/opt/SISwebMAX/webmaxTest/Service/logs
Max.reportRoot=/opt/SISwebMAX/webmaxTest/Service/reports
Max.loginBased=Y

#--------------------Trace Logging settings--------------------
Max.traceFile=trace.txt
Max.traceLevel=ALL
Max.tracing=ON

#--------------------TCP Port Settings--------------------
Max.useCc=N
Max.ccPort=2301

Here is what the interactive shell should show:

Code:
bash-3.00$ ./prop_test.sh
Do you install in test or prod? prod

Set Max.defBpId - Actual (CH999148):
Set Max.env - Actual (T):
Set Max.exceptionFile - Actual (exception.txt):
Set Max.fileRoot - Actual (/opt/SISwebMAX/webmaxTest/Service):
....

The properties file is used by a java based application.

Regards,
Stefan
# 4  
Old 08-26-2009
So if I understood it correct, you have problems with the substitution in the file.
If you have no problem to set up the while/read loop to get the wanted input, you can use the values stored in variables with for example sed to exchange the current values in the config file with the new ones.
Here a general example how substitute patterns:

Code:
# you got VAR filled with a value by your former read/while loop of course
sed "s/oldvalue/${VAR}/g"

Do this for several of your patterns and write it to a tmp file and maybe mv it over the original. Could take a backup before doing it.
# 5  
Old 08-27-2009
Hi zaxxon,

thanks for your answer and your help trying to get the goal.

My problem is not, to exchange value "a" with value "b", but the interactive part above. The example there is how the prompts should look like. but doing this with a "while read" loop fails.

This is what I've created:

Code:
while read line
do
  comment=`echo $line | sed -e 's/#.*/#/'`
  if [ $comment = "#" ]; then
      echo "$line" | sed -n 's/#.*/&/p' >>$tmpfile
  else
     cf_key=`echo $line | awk 'BEGIN {FS = "="} {print $1}'`
     cf_val=`echo $line | awk 'BEGIN {FS = "="} {print $2}'`
     printf "Set $cf_key - Actual ($cf_val): \n"
     read value
     if [ $value = "" ]; then
        echo "$cf_key=$cf_val" >>$tmpfile
     else
        echo "$cf_key=$value" >>$tmpfile
     fi
  fi 
done < $config

Running this will result in several lines of output on screen, but no input reading prompt (read value, get ignored).
My question is: Is there another way to get this working?

The for-loop is not an option as I've written at the begin, because it does'nt handle the file line by line (whitespace problem). Except if ther's a way to advise the for-loop to ignore the whitespace. I've alread played around with setting of IFS, but I didn't come any further.

Best regards,
Stefan
# 6  
Old 08-27-2009
there was already an input stream being put to by "< $config"
is it possible for you to not loop in the config file but add the parameters in the script itself?
# 7  
Old 08-27-2009
https://www.unix.com/shell-programmin...read-loop.html

see the above thread.
Code:
#!/bin/ksh

echo "Enter config file path:"
read config

echo "Enter tmp file path:"
read tmpfile

rm $tmpfile

while read line
do
  comment=`echo $line | sed -e 's/#.*/#/'`
  if [ $comment = "#" ]; then
      echo "$line" | sed -n 's/#.*/&/p' >>$tmpfile
  else
     cf_key=`echo $line | awk 'BEGIN {FS = "="} {print $1}'`
     cf_val=`echo $line | awk 'BEGIN {FS = "="} {print $2}'`
     printf "Set $cf_key - Actual ($cf_val): \n"
     read value </dev/tty 2>/dev/tty
     echo "Value read is $value"
     if [ $value = "" ]; then
        echo "$cf_key=$cf_val" >>$tmpfile
     else
        echo "$cf_key=$value" >>$tmpfile
     fi
  fi
done < $config

Login or Register to Ask a Question

Previous Thread | Next Thread

8 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Usage of #!/bin/sh vs #!/bin/bash shell scripts?

Some question about the usage of shell scripts: 1.) Are the commands of the base shell scripts a subset of bash commands? 2.) Assume I got a long, long script WITHOUT the first line. How can I find out if the script was originally designed für "sh" or "bash"? 3.) How can I check a given... (3 Replies)
Discussion started by: pstein
3 Replies

2. HP-UX

SNMP Walk need to enable

We are using a third party to monitor unix servers performance since last 60 days, since last 3 days we are not able to get the performance alarms on our tool. When we check the same with the tool team, they said "SNMP walk is not happening for all the servers." Performance we mean... (9 Replies)
Discussion started by: marunmeera
9 Replies

3. OS X (Apple)

When to use /Users/m/bin instead of /usr/local/bin (& whats the diff?)?

Q1. I understand that /usr/local/bin means I can install/uninstall stuff in here and have any chance of messing up my original system files or effecting any other users. I created this directory myself. But what about the directory I didn't create, namely /Users/m/bin? How is that directory... (1 Reply)
Discussion started by: michellepace
1 Replies

4. Shell Programming and Scripting

Shell script that will compare two config files and produce 2 outputs 1)actual config file 2)report

Hi I am new to shell scripting. There is a requirement to write a shell script to meet follwing needs.Prompt reply shall be highly appreciated. script that will compare two config files and produce 2 outputs - actual config file and a report indicating changes made. OS :Susi linux ver 10.3. ... (4 Replies)
Discussion started by: muraliinfy04
4 Replies

5. Shell Programming and Scripting

parsing config file to create new config files

Hi, I want to use a config file as the base file and parse over the values of country and city parameters in the config file and generate separate config files as explained below. I will be using the config file as mentioned below: (config.txt) country:a,b city:1,2 type:b1... (1 Reply)
Discussion started by: clazzic
1 Replies

6. UNIX for Dummies Questions & Answers

fuser: difference with bin/sh and bin/ksh shell script

Hi, I have a problem I don't understand with fuser. I launch a simple shell script mysleep.sh: I launch the command fuser -fu mysleep.sh but fuser doesn't return anything excepted: mysleep: Then I modify my script switching from #!/bin/sh to #!/bin/ksh I launch the command fuser -fu... (4 Replies)
Discussion started by: Peuj
4 Replies

7. Programming

ftw/nftw -- filesystem tree walk

Hi, I recently experimented with ftw() and nftw(). These are function for calling some function for every file in a subtree. I need to get full information about type of file. Almost everything is working according to documentation but I noticed following problem: With a value FTW_PHYS... (2 Replies)
Discussion started by: odys
2 Replies

8. UNIX for Dummies Questions & Answers

/bin/sh: /usr/bin/vi: No such file or directory when doing crontab

I just set up an ftp server with Red Hat 5.2. I am doing the work, I'm baby stepping, but it seems like every step I get stuck. Currently, I'm trying to set up a crontab job, but I'm getting the following message: /bin/sh: /usr/bin/vi: No such file or directory. I see that vi exists in /bin/vi,... (3 Replies)
Discussion started by: kwalter
3 Replies
Login or Register to Ask a Question