Linux.com

Home Linux Community Forums Linux System Administration Command Line/Scripting Need help using multiple variables within a line

Need help using multiple variables within a line

Link to this post 29 Dec 11

I have made a script which works fine. But when i include the for loop in my script in give errors. I know that this is an syntax error


./test.sh: line 17: ${test"$i"[0]} ${test"$i"[1]} ${test"$i"[2]} ${test"$i"[3]} ${test"$i"[4]}: bad substitution
Test1 Passed
./test.sh: line 17: ${test"$i"[0]} ${test"$i"[1]} ${test"$i"[2]} ${test"$i"[3]} ${test"$i"[4]}: bad substitution
Test1 Failed
./test.sh: line 17: ${test"$i"[0]} ${test"$i"[1]} ${test"$i"[2]} ${test"$i"[3]} ${test"$i"[4]}: bad substitution


Here is my script


#!/bin/bash

pre_result1=( 12.00 1.28 )
pre_result2=( 2.92 12.00 )
pre_result3=( 2.92 12.00 )
#pre_result3=12

test1=( s 3 3 4 5 )
test2=( p 2 5 7 )
test3=( r 2 5 7 )

for (( i=1; i<=3; i++ ))

do


./testelectronic <<< "${test"$i"[0]} ${test"$i"[1]} ${test"$i"[2]} ${test"$i"[3]} ${test"$i"[4]}" > test"$i".txt
#extracting required lines from file
result1=`head -n 6 test"$i".txt | tail -n 1`
result2=`tail -1 test"$i".txt`
#printing for testing purpose
#echo $result1
#echo $result2

#extracting required values from lines
#compare=result1 | awk '{print $NF}'
echo $result1 | awk '{print $NF}' > result1.txt
echo $result2 | awk '{print $NF}' > result2.txt


val1=0
val2=0
FILENAME="result1.txt"
while read line
do
val1=$line
done < $FILENAME

FILENAME="result2.txt"
while read line
do
val2=$line
done < $FILENAME

#printing for testing purpose
#echo $val1
#echo $val2



if [ "$val1" == "${pre_result1[0]}" ] && [ "$val2" == "${pre_result1[1]}" ]
then
echo "Test1 Passed"

else
echo "Test1 Failed"

fi

done

I Google for this and found an example and i use like this

./testelectronic <<< "${test[$i][0]} ${test[$i][1]} ${test[$i][2]} ${test[$i][3]} ${test[$i][4]}" > test$i.txt

It remove the error but now this line do not take parameters correctly.

Kindly help

Thanks in advance

usmangt

Link to this post 30 Dec 11

It appears that the issue may be the fact that you are trying to dynamically define the variable names within your script, which is a more complex function. I recommend checking out the post at http://www.humbug.in/2010/bash-tricks-create-variables-dynamically-using-some-eval-magic/ which will point you in the right direction.

Link to this post 30 Dec 11

Your problem is that you are not correctly quoting.

./testelectronic <<< "${test"$i"[0]} ${test"$i"[1]} ${test"$i"[2]} ${test"$i"[3]} ${test"$i"[4]}" > test"$i".txt

This is just a big mess. Quoting doesn't work as "()" or "{}" do in C or many other languages.

Try with

./testelectronic <<< "${test$i[0]}" "${test$i[1]}" "${test$i[2]}" "${test$i[3]}" "${test$i[4]}" > "test$i".txt

The "solution" you found:

./testelectronic <<< "${test[$i][0]} ${test[$i][1]} ${test[$i][2]} ${test[$i][3]} ${test[$i][4]}" > test$i.txt

Seems to work but what this is doing is giving "./testelectronic" only one argument (which is what's within the quotes). That's why your line is not taking the parameters correctly.

Link to this post 31 Dec 11

If possible eventually you can get into writing php scripts instead bash scripts.

Bash lacks integrity in its language, sometimes it appears too restrictive, and too discrete.

PHP will brings you that integrity, and superior control. And bash scripts in PHP is also a too good choice.

Link to this post 31 Dec 11

The OP was asking about fixing their bash script, what does PHP have to do with the request?

Link to this post 31 Dec 11

Kiran your reply doesn't make much sense. What if I say to do this in C because it's faster? come on!

Anyway, I'm wating for the OP to say if the solution worked or not :)

Regards

Who we are ?

The Linux Foundation is a non-profit consortium dedicated to the growth of Linux.

More About the foundation...

Frequent Questions

Join / Linux Training / Board