Assign Unknown Values to Variables


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Assign Unknown Values to Variables
# 1  
Old 11-29-2014
Assign Unknown Values to Variables

i have a program that spits out a certain number of values. i dont know the number of values. they can be 4, 10, 7, 20, no idea.

but, i want to be able to assign each of the value returned by this program to a variable.

in the latest instance, the program gave the following 6 values:

Code:
4
8
11
12
16
20

i thought of doing something like this:

Code:
echo "${returnedvalues}" | while read valA valB valC valD valE valF
do
....
....
done

the problem is, this would only work if i knew the exact number of values returned. any ideas of how i can do this?
# 2  
Old 11-29-2014
Best thing i could think of would be either an array, or using the var-value as filename within a tempfolder.

What are you heading for?
Might help to provide suggestions.
# 3  
Old 11-30-2014
Some hints for your problem, better you use array as sea suggested.

Code:
akshay@Aix:~$ return="1 2 3 4 5 6"
akshay@Aix:~$ for i in $return; do echo $i; done
1
2
3
4
5
6


akshay@Aix:~$ array=( $return ); echo ${array[*]}
1 2 3 4 5 6

# Array Length
akshay@Aix:~$ echo "array length ${#array[@]}"
array length 6

# Access each element
akshay@Aix:~$  echo ${array[0]}
1
akshay@Aix:~$  echo ${array[1]}
2
akshay@Aix:~$  echo ${array[5]}
6

This User Gave Thanks to Akshay Hegde For This Post:
# 4  
Old 11-30-2014
Hello SkySmart,

Following may help also in same.

Code:
in KSH:
return="1 2 3 4 5 6"
set -A array $return
for i in ${array[@]}
do
        echo $i
done

in BASH:
return="1 2 3 4 5 6"
for i in ${return[@]}
do
        echo $i
done

Thanks,
R. Singh
These 2 Users Gave Thanks to RavinderSingh13 For This Post:
# 5  
Old 11-30-2014
Quote:
> i thought of doing something like this ...
That might work, given that you don't quote the variable you're echoing.

Quote:
> ... if i knew the exact number of values returned
This could be done relatively easy before the while loop, e.g.
Code:
valcount=$(echo "${returnedvalues}" | wc -l)

Note I left the variable quoted, so we can count newline character. But this won't help you further.

Try below script.
Code:
#!/bin/bash

# number of arguments (values)
args="$#"

# no values? -> exit
[ $args -eq 0 ] && exit 1

# dynamically generating variables: var1, var2, ...
vars=$( for ((i=1;i<=$args;i++)); do  printf "%s " var${i}; done )


echo "$@" | while read ${vars}
do
# uncomment next two lines to print var: value pairs
#    for ((i=1;i<=$args;i++)); do  var=var${i}
#    printf "%s: %d\n" "var${i}" "${!var}"; done
    echo "placeholder, substitute this with useful command(s)"
done

Demo:
Code:
$ #faking script output here ;-)
$ retval="4
8
11
12
16
20"
$
$ #important! don't quote the variable
$ ./script.sh ${retval}
var1: 4
var2: 8
var3: 11
var4: 12
var5: 16
var6: 20
placeholder, substitute this with useful command(s)
$

This User Gave Thanks to junior-helper For This Post:
# 6  
Old 11-30-2014
In bash, try:
Code:
read -a arr <<< $var

Code:
echo "${arr[0]}"
echo "${arr[1]}"
...


Code:
echo ${returnedvalues} | 
{ 
  read -a arr
  echo "${arr[0]}"
  echo "${arr[1]}"
  ...
}

Or
Code:
set -- $returnedvalues
echo $1
echo $2
...

---
At Junior_helper. Note that that will only go through the loop once. Using code groups ( { ... } ) would accomplish the same:

Code:
echo "$@" |
{
  read ${vars}
  ....
}

( But you can skip the whole bit, since the values will already be in $1, $2, $3 etc.. )

Last edited by Scrutinizer; 11-30-2014 at 07:47 AM..
These 2 Users Gave Thanks to Scrutinizer For This Post:
# 7  
Old 11-30-2014
Quote:
Originally Posted by RavinderSingh13
Hello SkySmart,

Following may help also in same.

...

in BASH:
Code:
return="1 2 3 4 5 6"
for i in ${return[@]}
do
        echo $i
done

Thanks,
R. Singh
Note that the bash suggestion does not use an array, and the variable is not split into array elements.
Code:
for i in ${return[@]}

is the same as
Code:
for i in $return

This User Gave Thanks to Scrutinizer For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

A better way to assign values to variables - shell

so i've been used to doing it this way: SVAL=$(echo "7 3 2 38 3" | awk '{print $2}') 4VAL=$(echo "4:21:N:3" | awk -F":" '{print $4}') I know there's a way to do it by putting the value in an array and assigning it that way. but i'm not sure how to do it efficiently. any ideas? i dont... (9 Replies)
Discussion started by: SkySmart
9 Replies

2. Shell Programming and Scripting

Read record from the text file contain multiple separated values & assign those values to variables

I have a file containing multiple values, some of them are pipe separated which are to be read as separate values and some of them are single value all are these need to store in variables. I need to read this file which is an input to my script Config.txt file name, first path, second... (7 Replies)
Discussion started by: ketanraut
7 Replies

3. Shell Programming and Scripting

Unable to read assign values to two variables in while loop

I am trying to read a input file which has two columns separated by space Input file server1 server2 server3 server4 server5 server6 When i execute the below while code it reads line by line and a and b variables are able to successfully fetch the values while read a b do echo "$a" echo... (5 Replies)
Discussion started by: chidori
5 Replies

4. Shell Programming and Scripting

Read variables names from array and assign the values

Hi, I have requirement to assign values to variables which are created dynamically. Below is the code which i am using to achieve above requirement. #!/bin/ksh oIFS="$IFS"; IFS=',' STR_FAIL_PARENT_IF_FAILS="WF_F_P_IF_FAILS1,WF_F_P_IF_FAILS2,WF_F_P_IF_FAILS3" set -A... (1 Reply)
Discussion started by: tmalik79
1 Replies

5. Shell Programming and Scripting

Need to parse lines in a file into two words and assign the values to two variables

For example, I have a file with below lines containing VOB tags and VOB paths. * /vobs/fts/FTSUSM20_VOB /ccvobsslx01/projects/vobs/eml/FTSUSM20_VOB * /vobs/fts/FTS20_VOB /ccvobsslx01/projects/vobs/eml/FTS20_VOB * /vobs/pmv/PMS_VOB /ccvobsslx01/projects/vobs/cpm/_/PMS_VOB *... (4 Replies)
Discussion started by: senthilkc
4 Replies

6. Shell Programming and Scripting

Assign values to variables of a file

Hi, I have a file like the following... CUST= DIR= NULIST= name=philps_123 How can i add values to each of these unassigned variables using a shell script? say for eg: i have values for CUST as onida, dir as /dir/onida, NULIST as /tmp/onida_files. How can i add these values to... (11 Replies)
Discussion started by: Tuxidow
11 Replies

7. Shell Programming and Scripting

Assign Values to variables from a text file

The text file has one single row and looks like this Q1 P1 2006 I have to pick up this values from a shell script into three different variables, say quarter, period and year from the above text file. Some one know's how to do this? I went through 'sed', dint really know how to... (3 Replies)
Discussion started by: sarsani
3 Replies

8. Shell Programming and Scripting

how can i read text file and assign its values to variables using shell

Hello, I have a cat.dat file, i would like shell to read each 3 lines and set this 3 lines to 3 different variables. my cat.dat is: 11 12 +380486461001 12 13 +380486461002 13 14 +380486461003 i want shell to make a loop and assign 1st line to student_id, 2nd line to... (4 Replies)
Discussion started by: rosalinda
4 Replies

9. Shell Programming and Scripting

How do I assign values to variables made in a script?

How do I assign values to variables made in a script? e.g. for ((x=0;x<=5;i+=1)); do Xm$i=$var done (0 Replies)
Discussion started by: gelitini
0 Replies

10. Programming

how do u assign the values to different variables when it is presneted in one line??

hey people.. i have a configuration file that looks like 7080 7988 net04.xxxxx.edu 20 where 20 is the number of threads in the thread pool initially. net04.xxxxx.edu is the hostname. and 7080 7988 are two ports. first one for client requests and second one for dns communication. now my... (2 Replies)
Discussion started by: SwetaShah
2 Replies
Login or Register to Ask a Question