Copy file and evaluate its internal variables


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Copy file and evaluate its internal variables
# 1  
Old 01-29-2013
Copy file and evaluate its internal variables

Hi

I have been trying to figure a way to copy a file, (a template), that has internal variables. Using the values as defined for those variables in another script.

So a file called x -

Code:
#! /bin/bash
D=aa.$X.bb

And file y

Code:
#! /bin/bash

X=6
while read line
do
    eval echo "$line" 
done < x

Output -

Code:
brad@TX5XN:~/wip$ y

D=aa.6.bb

brad@TX5XN:~/wip$

As you can see I lose the line with the #! from file x

If I redirect to a file -

Code:
brad@TX5XN:~/wip$ cat y
#! /bin/bash

X=6
while read line
do
    eval echo "$line"  > z
done < x

I lose all of the lines except the blank line from the end of the file -

Code:
brad@TX5XN:~/wip$ cat z

brad@TX5XN:~/wip$

Is there a simple and elegant way of doing this?

Thanks

Brad
# 2  
Old 01-29-2013
The line #! /bin/bash is useless no matter how you cut it, for the space in it prevents it from working.

Try a here-document:

Code:
cat <<EOF
#!/bin/bash
D=aa.$X.bb
EOF

Of course, if you're templating hundreds of slightly different scripts/files, there is probably a more straightforward way to do what you want.
# 3  
Old 01-29-2013
You could use awk (nawk or gawk).

This example looks for %%var%% and expands with the value of the shell variable. Note you need to export the variable so awk can see it:

expand.sh:
Code:
awk -F% ' /%%/ {
 while(match($0, "%%[A-Za-z0-9_]+%%")) {
    tmp = substr($0, 1, RSTART-1)
    var = substr($0, RSTART+2, RLENGTH-4);
    printf "%s%s", tmp, ENVIRON[var];
    $0=substr($0,RSTART+RLENGTH);
 }
 print; next } 1' $@

template:
Code:
dbname: %%DBNAME%%
dbusername:  %%DB_USER_NAME%%
dbpwd:  %%DB_PWD%%

Test script:
Code:
DBNAME="testing1"; export DBNAME
DB_USER_NAME="Test user"; export DB_USER_NAME
DB_PWD="/home/testing1"; export DB_PWD
./expand.sh template


Last edited by Chubler_XL; 01-29-2013 at 04:46 PM.. Reason: Formatting
# 4  
Old 01-29-2013
guys thanks for the replies.

offline right now but will try these out tomorrow. :-)
# 5  
Old 01-30-2013
eval takes the result of its parameters and starts expanding/executing it anew as if given from stdin. The # in #! /bin/bash makes this a comment line, so eval does not execute anything which results in the empty line that you see in your output.
Regarding your redirection: it does exactly what you told it to do: reset z to zero and overwrite it. Using >> z will append your output to z.
# 6  
Old 01-30-2013
doh!

of course.

thanks Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Copy same file with different variables

Hi All, I have same file with like 1xyz_1 ,1xyz_2 , 2ghj_1, 2ghj_2, 4wer_1, 4wer1_2 etc with lots of file having similar type of name. I want to creat folder and copy similar file to that folder. for example folder 1xyz should contain only 1xyz_1 ,1xyz_2. :mad: Thank you in Advance. ... (7 Replies)
Discussion started by: XXLMMN
7 Replies

2. Shell Programming and Scripting

How to evaluate expressions in file

I have a situation where i need to evaluate expression and do substitutions in file file.ports port1=`expr $STARTINGPORT + 1` port2=`expr $STARTINGPORT + 2` port3=`expr $STARTINGPORT + 3` Intended output If my STARINGPORT is 100 port1=101 port2=102 port3=103 Can anyone please... (1 Reply)
Discussion started by: sasiharitha
1 Replies

3. UNIX for Dummies Questions & Answers

Read a flat file, evaluate and create output. UNIX SCRIPT.

Hi all, I have a flat file as below; 470423495|1||TSA-A000073800||1|||1 471423495|1||TSA-A000073800||5|||5 472423495|1||TSA-A000073800||2|||7 473423495|1||TSA-A000073800||3|||3 I like to create a Unix script. The script have to valuate the last two columns, if the values are... (4 Replies)
Discussion started by: mrreds
4 Replies

4. Shell Programming and Scripting

Copy file to SD card from internal flash.

Hi, At first I have to say that I know nothing about Linux :( But I am looking for solution how to copy one file from internal Lowrnace HDS flash memory. Lowrance HDS is Linux based device. Here is the link for firmware update files for this unit. At the end of main firmware file there... (62 Replies)
Discussion started by: PouchX
62 Replies

5. Shell Programming and Scripting

Need help in writing a script that do internal grep on a log file..and extract acct no's from it..

I need to write a script, which takes the input a log file and create output file with acct no's line by line from selected records with text like (in red) : 18:51:18 | 217863|Acct 0110855565|RC 17608| 16 Subs| 1596 UsgRecs| 2 Secs| 430 CPUms| prmis2:26213 <MoveUsage d aemon needs to run... (7 Replies)
Discussion started by: rkrish
7 Replies

6. UNIX for Dummies Questions & Answers

How to use sed to copy specific lines from a file using shell variables?

hello! I am trying to use sed to copy specific set of lines from a file for which the starting and ending line numbers of the lines to be copied are stored in shell variables. How can i copy those lines? if the input_file is something like this and if the following is the script a=2 b=4... (4 Replies)
Discussion started by: a_ba
4 Replies

7. Shell Programming and Scripting

File splitting, naming file according to internal field

Hi All, I have a rather stange set of requirements that I'm hoping someone here could help me with. We receive a file that is actually a concatenation of 4 files (don't believe this would change, but ideally the solution would handle n files). The super-file looks like:... (7 Replies)
Discussion started by: Leedor
7 Replies

8. UNIX for Dummies Questions & Answers

copy file using a variables

i am having a file name hello.txt i want to move it to some where in the destination folder suppose name is accnt i have done this things but not working , can't we assign a path to a variable #/bin/sh file =hello.txt dest ='accnt' cp $file $dest Thank & Regard Dina (3 Replies)
Discussion started by: Manabhanjan
3 Replies

9. UNIX for Advanced & Expert Users

Forwarding internal internet packets to internal webserver using iptables

Hi, I need to redirect internal internet requests to a auth client site siting on the gateway. Currently users that are authenticated to access the internet have there mac address listed in the FORWARD chain. All other users need to be redirected to a internal site for authentication. Can... (1 Reply)
Discussion started by: mshindo
1 Replies

10. Shell Programming and Scripting

How to evaluate the value read from a file?

Hi, Could someone please help me with how to do the following? Say I have a flat file test.lst and the content of the file is: Report Date - `date '+%m%d%Y'` I'm trying the following while read myLine do echo ${myLine} done<test.lst This prints Report Date - `date... (1 Reply)
Discussion started by: arunsoman80
1 Replies
Login or Register to Ask a Question