Sponsored Content
Full Discussion: Loop through variables
Top Forums Shell Programming and Scripting Loop through variables Post 302839891 by durden_tyler on Saturday 3rd of August 2013 02:38:39 PM
Old 08-03-2013
Quote:
Originally Posted by biobill
...
Code:
Test: eval echo \$${src_file}
the_right_text
test: src_file_name=`eval echo \$${src_file}`
test: echo ${src_file_name}
29199{src_file}

so why when I manually do the eval it comes up with the right text, but when assigning the eval to a variable and then echo it it comes out wierd?
I am unable to reproduce your test in my system. This looks like the output of some shell script. I'll need to look at the script to figure out what's going on.

However, what's happening at the end is that the value of the variable "src_file_name" is the following two values appended to each other in the order shown:
(1) the value of $$
(2) the constant text "{src_file}"

Now, $$ is a built-in shell variable which holds the value of the PID, the process id. You can check the PID of each process in your shell by executing the following command and looking at the value in the 2nd column:

Code:
ps -ef

You can also check the value of your current shell PID:

Code:
echo $$

And view it and its descendent processes in the process list:

Code:
ps -ef | grep <the_number_you_saw_for_$$_above>

As for your problem, you are creating variable names within the loop, and you want to access their values for your file names. There is a construct "${!variable}" for that.

A simple test follows. I create and assign a variable and echo its value:

Code:
$ 
$ pointer_to_val=123456
$ echo $pointer_to_val
123456
$

Now, I assign the text "pointer_to_val" to another variable and echo it:

Code:
$ 
$ val=pointer_to_val
$ echo $val
pointer_to_val
$ 
$

So far, everything is as expected.

But in the last echo command above, let's say I want to see the value of pointer_to_val, i.e. I want to see the value 123456 that pointer_to_val points to.

To do that, I'd use ${!variable} construct:

Code:
$ 
$ echo ${val}
pointer_to_val
$ 
$ echo ${!val}
123456
$

This idea could be incorporated in your script as follows:

Code:
$ 
$ cat -n check_for_files_1.sh
     1    #!/usr/bin/ksh
     2    DATAPATH="/my/data/dir"
     3    src_file_1=file_one.txt
     4    src_file_2=file_two.sql
     5    src_file_3=file_three.py
     6    src_file_4=file_four.java
     7    src_file_5=file_five.c
     8    first=1
     9    last=5
    10    while [[ $first -le $last ]]
    11    do
    12      var=src_file_$first
    13      file=${!var}
    14      echo "${DATAPATH}/${file}"
    15      (( first += 1 ))
    16    done
$ 
$ 
$ . check_for_files_1.sh
/my/data/dir/file_one.txt
/my/data/dir/file_two.sql
/my/data/dir/file_three.py
/my/data/dir/file_four.java
/my/data/dir/file_five.c
$ 
$ 
$

And if the ${!variable} construct is not supported in your shell, you could use the old-fashioned eval construct:

Code:
$ 
$ cat -n check_for_files.sh
     1    #!/usr/bin/ksh
     2    DATAPATH="/my/data/dir"
     3    src_file_1=file_one.txt
     4    src_file_2=file_two.sql
     5    src_file_3=file_three.py
     6    src_file_4=file_four.java
     7    src_file_5=file_five.c
     8    first=1
     9    last=5
    10    while [[ $first -le $last ]]
    11    do
    12      var=src_file_${first}
    13      file=$(eval "echo \$$var")
    14      echo "${DATAPATH}/${file}"
    15      (( first += 1 ))
    16    done
$ 
$ 
$ . check_for_files.sh
/my/data/dir/file_one.txt
/my/data/dir/file_two.sql
/my/data/dir/file_three.py
/my/data/dir/file_four.java
/my/data/dir/file_five.c
$ 
$

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

using variables outside a while loop

Hi Guys, I have a scripts that uses a while loop to read a file and set 2 variables. How can I do this so the variables can be used outside the while loop ? Below is an example....# ./junk2 -m -e user EXE=user master=TRUE DB_TAG=PRODUCT In loop MST=MST=testsvr1:3110 In loop ARGS=... (2 Replies)
Discussion started by: Tornado
2 Replies

2. Shell Programming and Scripting

Is there a better way I could have run this loop. (For loop with two variables)

Sorry for such a dreadful title, but I'm not sure how to be more descriptive. I'm hoping some of the more gurutastic out there can take a look at a solution I came up with to a problem, and advice if there are better ways to have gone about it. To make a long story short around 20K pieces of... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

3. Shell Programming and Scripting

Using variables created sequentially in a loop while still inside of the loop [bash]

I'm trying to understand if it's possible to create a set of variables that are numbered based on another variable (using eval) in a loop, and then call on it before the loop ends. As an example I've written a script called question (The fist command is to show what is the contents of the... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

4. Shell Programming and Scripting

SH: two variables in for loop

Hi, say I have a simple sh script like this: for i in a b c d do for j in 1 2 3 4 do echo "$i $j" done done and the output is a 1 a 2 a 3 a 4 b 1 (20 Replies)
Discussion started by: marcpascual
20 Replies

5. Shell Programming and Scripting

Two variables in a for loop

Can we assign two variables in a for loop? I have an input file: 000301|20100502 835101|20100502 I want to read this file in a for loop and assign values to two different variables. I did this now but did not work for STORE,RUNDATE in `awk -F\| '{print $1,$2}' inputfile ... (4 Replies)
Discussion started by: gpaulose
4 Replies

6. Shell Programming and Scripting

Need help in for loop with 2 variables

Hi, I need help on for loop need to add domain and IP In domain list 1.com 2.com 3.com In Ip list 1.1.0.1 1.2.0.1 1.3.0.1 1.com 1.1.0.1 2.com 1.2.0.1 3.com 1.3.0.1 I need to excute this command (4 Replies)
Discussion started by: ranjancom2000
4 Replies

7. Shell Programming and Scripting

Help with a For loop and variables

Greetings. I'm completely new to shell scripting and quickly trying to catch on. Here's my scenario: I have a text file, named ip.txt, containing IP addresses. I want to automatically perform a whois query on each address in the file, search the output for the country, and then put both the IP... (4 Replies)
Discussion started by: molnir
4 Replies

8. Shell Programming and Scripting

for loop with 2 variables

i am having a file contants as below my requirement is for file in `awk -F "," '{print $8,$9}'` <temp.txt echo "$file" echo "$file">test.txt a=`awk -F "," '{print $1}' `<test.txt b=`awk -F "," '{print $2}' `<test.txt but script reads , i want both the vales for further... (5 Replies)
Discussion started by: sagar_1986
5 Replies

9. Shell Programming and Scripting

Need to loop three variables

Hi, I have a out from a command i need to grep a report. For that i need loop 3 variable for that. How i can loop need help. Symmetrix ID : 123456 Masking View Name : Host16 Last updated at : 04:13:06 PM on Thu Mar 17,2011 Initiator Group Name : Host16 Host... (3 Replies)
Discussion started by: ranjancom2000
3 Replies

10. Shell Programming and Scripting

Help with variables in loop

Hello, please assist: users="test1 test2" keytest1="abcd" keytest2="dbcd" for i in $users do echo "$key${i}" > fileout done So, my objective is to take the current user (ie test1) in loop and echo its associated keyname (ie keytest1) variable to a file. The echo... (2 Replies)
Discussion started by: motdman
2 Replies
All times are GMT -4. The time now is 06:52 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy