Re: Manage parameter-file (336 Views)
Reply
Honored Contributor
Oviwan
Posts: 692
Registered: ‎11-29-2005
Message 1 of 21 (336 Views)
Accepted Solution

Manage parameter-file

Hi @ll

what is the best way to manage a parameter-file?
I have a file like this:

par1=value1
par2=value2 #comment
par3=value3

i have a menu and there is a menu-point which is called "set par1", when i choice this point comes a prompt where i can give the value for par1. after i give the value, how can i set this value in the parameter-file? and also read from the file?

Thanks
Please use plain text.
Honored Contributor
Oviwan
Posts: 692
Registered: ‎11-29-2005
Message 2 of 21 (336 Views)

Re: Manage parameter-file

*EDIT*
it should be in ksh.

Regards
Please use plain text.
Honored Contributor
Rodney Hills
Posts: 1,679
Registered: ‎09-09-1996
Message 3 of 21 (336 Views)

Re: Manage parameter-file

This looks like something for a shell script, so you would use "." command to assign your shell variables. Then to update the param file, write all the params back. Example-

par2=23
(
echo "par1=$par1"
echo "par2=$par2 #comment"
echo "par3=$par3"
) >yourparamfile

HTH

-- Rod Hills
There be dragons...
Please use plain text.
Honored Contributor
Oviwan
Posts: 692
Registered: ‎11-29-2005
Message 4 of 21 (336 Views)

Re: Manage parameter-file

Thanks

what is the best way to read one value from the parameter-file?

and something other:
what means "set -x"?
Please use plain text.
Acclaimed Contributor
James R. Ferguson
Posts: 21,184
Registered: ‎07-06-2000
Message 5 of 21 (336 Views)

Re: Manage parameter-file

Hi:

One easy way to extract one parameter's value from your file is to use 'awk'.

# echo "par2=value2"|awk '/par2/ {split($0,a,/=/);print a[2]}'

..returns (prints) value2

# X=`echo "par2=value2"|awk '/par2/ {split($0,a,/=/);print a[2]}'`

Thus ${X} now contains 'value2', the value of 'par2'.

As for the shell construct 'set -x' --- this prints the shell commands as they are executed. This is useful in debugging. See the man pages for 'sh-psix' for more information.

Regards!

...JRF...
Please use plain text.
Acclaimed Contributor
James R. Ferguson
Posts: 21,184
Registered: ‎07-06-2000
Message 6 of 21 (336 Views)

Re: Manage parameter-file

Hi (again):

I should generalize a bit; sorry. Given your parameter file is composed with "=" as the delimiter betweeen parameter and value, to find the value of parameter "X":

# X=par2;awk '{if ($1~X) {split($0,a,/=/);print a[2]}}' X=$X parmfile

...returns the value of 'par2'.

Regards!

...JRF...
Please use plain text.
Honored Contributor
Oviwan
Posts: 692
Registered: ‎11-29-2005
Message 7 of 21 (336 Views)

Re: Manage parameter-file

Ty

is there also a way to write a new value in the parameter-file without rewrite the whole parameter-file? also with awk.
Please use plain text.
Acclaimed Contributor
James R. Ferguson
Posts: 21,184
Registered: ‎07-06-2000
Message 8 of 21 (336 Views)

Re: Manage parameter-file

Hi Oviwan:

Yes, you can update your file's parameters in place with perl:

# perl -i.old -ple 's/par2=.+\b/par2=newvalue/' parmsfile

...would make a backup copy "parmsfile.old" and update inplace the value of 'par2' changing it from whatever follows the "=" character to "newvalue".

Regards!

...JRF...
Please use plain text.
Esteemed Contributor
Arturo Galbiati
Posts: 830
Registered: ‎02-10-2003
Message 9 of 21 (336 Views)

Re: Manage parameter-file

Hi,
I suggest:
grep ^par1 parameter-file|cut -d"=" -f2|sed 's/^ *//g'
In this way you can have any number of spaces between = and the parameter value.
HTH,
Art
Please use plain text.
Acclaimed Contributor
James R. Ferguson
Posts: 21,184
Registered: ‎07-06-2000
Message 10 of 21 (336 Views)

Re: Manage parameter-file

Hi:

Arturo's point about embedded spaces is easily managed:

# perl -i.old -ple 's/par2\s*=.+\b/par2=newvalue/' parmsfile

Regards!

...JRF...
Please use plain text.
Honored Contributor
Oviwan
Posts: 692
Registered: ‎11-29-2005
Message 11 of 21 (336 Views)

Re: Manage parameter-file

Thanks @ll

is there also a chance to do this:
# perl -i.old -ple 's/par2\s*=.+\b/par2=newvalue/' parmsfile
in ksh or awk? nice solution with perl, but i wouldn't mix a lot of programming languages, if possible only ksh and awk.

Please use plain text.
Acclaimed Contributor
James R. Ferguson
Posts: 21,184
Registered: ‎07-06-2000
Message 12 of 21 (336 Views)

Re: Manage parameter-file

Hi Oviwan:

Perl's regular expression handling is one of the best available. Since perl allows updating in-place, whereas 'awk' or 'sed' force you to redirect modified output into a second file and then rotate that second file over the first, I also choose perl for this task.

As far as mixing various languages, then, one sees this all the time in shell scripts. Consider the number of shell lines with 'sed' and 'awk' snippets. If a shell uses 'cut' or 'grep' in reality that too is mixing languages since the later are C-code.

Could your requirement be met wholly in shell? Well, yes. For instance, you could parse your parameter file by using the shell's IFS (inter-field-separator) much along the lines of what I did with 'split' in the 'awk' code.

Regards!

...JRF...
Please use plain text.
Honored Contributor
Oviwan
Posts: 692
Registered: ‎11-29-2005
Message 13 of 21 (336 Views)

Re: Manage parameter-file

You are right, but what is more professional? to mix a lot of languages or only use of one or two (if possible)?
how do you handle this at your own?
Please use plain text.
Acclaimed Contributor
James R. Ferguson
Posts: 21,184
Registered: ‎07-06-2000
Message 14 of 21 (336 Views)

Re: Manage parameter-file

Hi Oviwan:

You asked, "...what is more professional? to mix a lot of languages or only use of one or two (if possible)? how do you handle this at your own?"

I prefer to drive screws with screwdrivers and nails with hammers. By this I mean, I perfer to do things easily and gracefully with the tools that offer both ease of use and good performance.

Just because you can do something in language X doesn't mean that you should. I want readable, maintainable (flexible) code that performs well using a minimum of server resources in that order. Sometimes mixing two languages (e.g. shell + awk or shell + sed or shell + perl) is an easy solution. The whole Unix philosophy is built around the idea of plumbing and to me this is one case of it.

Certainly as one becomes more familar and proficient with a language, like any tool, one tends to grab it at the start of a project. Many of the tasks we do in shell scripts could be re-written in perl. In cases where a working piece of code already exists I find no harm in leveraging another language for a small subtask.

"Mixing" languages is really nothing more than calling modules or libraries and that generally means making things easier in my opinion.

Regards!

...JRF...
Please use plain text.
Honored Contributor
Oviwan
Posts: 692
Registered: ‎11-29-2005
Message 15 of 21 (336 Views)

Re: Manage parameter-file

Thanks JRF for your opinion and the code.

Regards Oviwan
Please use plain text.
Honored Contributor
Oviwan
Posts: 692
Registered: ‎11-29-2005
Message 16 of 21 (336 Views)

Re: Manage parameter-file

One question to JRF's perl:

why doesn't work my adjustment? the parameter file doesn't change:
echo $par_name $par_value | perl -i.old -F: -ple 's/^$F[0]\s*=.*\b/$F[0]=$F[1]/o' ${prg_path}${prg_par_file}

output of set -x:
+ echo db_name PROD
+ perl -i.old -F: -ple s/^$F[0]\s*=.*\b/$F[0]=$F[1]/o /home/oracle/scripts/file.par

are my perl parameters wrong? or is there another chance to include the shell variable $par_name in the perl?

Thanks a lot
Please use plain text.
Acclaimed Contributor
James R. Ferguson
Posts: 21,184
Registered: ‎07-06-2000
Message 17 of 21 (336 Views)

Re: Manage parameter-file

Hi Oviwan:

I you last post, there are several things amiss. It looks like you are attempting to autosplit on the ":" character but you don't specify '-a' nor do you explicity 'split' $_.

What you want to do is let the shell expand your variables and then present them to the perl snippet:

# arg=par2;val=newvalue;perl -i.old -ple "s/$arg\s*=.+\b/$arg=$val/" parmsfile

Note that this is a variation on my last post. By using double-quotes I let the shell evaluate the $arg and $val variables before perl runs.

Regards!

...JRF...
Please use plain text.
Honored Contributor
Oviwan
Posts: 692
Registered: ‎11-29-2005
Message 18 of 21 (336 Views)

Re: Manage parameter-file

Thanks a lot, now it works perfectly!

I have every time troubles with this quotes ("'`) :(

Regards
Please use plain text.
Honored Contributor
Oviwan
Posts: 692
Registered: ‎11-29-2005
Message 19 of 21 (336 Views)

Re: Manage parameter-file

I have still an other question.

is it possible to include a file in a shell-script file?
one file is the main programm the other one is the function file.

i search something like exists in php:
include ("functionfile");


Regards
Please use plain text.
Acclaimed Contributor
James R. Ferguson
Posts: 21,184
Registered: ‎07-06-2000
Message 20 of 21 (336 Views)

Re: Manage parameter-file

Hi Oviwan:

You asked if it is possible to include a file in a shell script. Yes, the process is called "sourcing" a file. You cause this by writing a "dot" followed by a "blank" followed by the file name:

#/usr/bin/sh
echo "the next line says include the file"
. $HOME/includeme
echo "done"

This technique is often used to include environmental variables from a common file into a script instead of declaring them in a login profile.

Regards!

...JRF...
Please use plain text.
Honored Contributor
Oviwan
Posts: 692
Registered: ‎11-29-2005
Message 21 of 21 (336 Views)

Re: Manage parameter-file

Thanks a lot, that's exactly what i needed!

Regards
Please use plain text.
The opinions expressed above are the personal opinions of the authors, not of HP. By using this site, you accept the Terms of Use and Rules of Participation