Visit Our UNIX and Linux User Community


Using arrays in shell


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using arrays in shell
# 1  
Old 10-29-2009
Using arrays in shell

I have three arrays. One is Master array and that has list of other array in config file.
for e.g (for simplicity I have only defined array with 2 elements each)

Code:
set +A MASTERARRAY SQLUPDATE_ONETIME SQLUPDATE_DAILY END_OF_ARRAY

set +A SQLUPDATE_ONETIME  update12 update22  END_OF_ARRAY
set +A SQLUPDATE_DAILY  update32 update42 END_OF_ARRAY


I am trying to write a shell script (KSH) to iterate over master array to get the list of array to process (for e.g. SQLUDATE_ONETIME) I need to process one by one. Then go through each element of processing array then do something with it. This is what I have so far.. Any help will be appreciated.

--- Code starts here-----

Code:
set +A MASTERARRAY SQLUPDATE_ONETIME SQLUPDATE2_DAILYEND_OF_ARRAY

set +A SQLUPDATE  update12 update22  END_OF_ARRAY
set +A SQLUPDATE2  update32 update42 END_OF_ARRAY
#echo "first  - ${SQLUPDATE[1]}\n"

CTR=0
while [[ ${MASTERARRAY[CTR]} != "END_OF_ARRAY" ]]; do
echo "Processing ${MASTERARRAY[CTR]} element of an TEMPARRAy\n" ELEMENT=${MASTERARRAY[CTR]} echo "Processing ${ELEMENT} element of an MASETERARRAY\n" FIRSTELEMENT=$(eval echo \$${ELEMENT}[$CTR]) echo "This FIRST ELEMENT ${FIRSTELEMENT}\n"
count=0 while [[ $(eval echo \$${ELEMENT}[count]) != "END_OF_ARRAY" ]] ;do ELMNT2=$(eval echo \$${ELEMENT}[count]) echo "This is the next element of $ELEMENT - <$ELMNT2>\n" # do some checking and process the element (( count = count + 1 )) done (( CTR = CTR + 1 )) done

I am having trouble going thru arrays listed in Masterarray - Please help

Last edited by Franklin52; 10-30-2009 at 05:34 AM.. Reason: Please use code tags!
# 2  
Old 10-29-2009

Please put code in [code]...[/code] tags.

Code:
for element in "${MASTERARRAY[@]}"
do
  case $element in END_OF_ARRAY) break;; esac
  eval "array=( \"\${${element%_*}[@]}\" )"
  printf "\nArray: %s\n" "${element%_*}"
  for e in "${array[@]}"
  do
      case $e in END_OF_ARRAY) break;; esac
      printf "\nArray: %s\n" "$e"
  done
done

(You don't need END_OF_ARRAY elements.)
# 3  
Old 10-29-2009
It gives me syntax error

Code:
#!/usr/bin/ksh
set +A MASTERARRAY SQLUPDATE SQLUPDATE2 END_OF_ARRAY
set +A SQLUPDATE  update12 update22
set +A SQLUPDATE2  update32 update42
for element in "${MASTERARRAY[@]}"
do
  case $element in END_OF_ARRAY) break;; esac
  eval "array=( \"\${${element%_*}[@]}\" )"
  printf "\nArray: %s\n" "${element%_*}"
  for e in "${array[@]}"
  do
      case $e in END_OF_ARRAY) break;; esac
      printf "\nArray: %s\n" "$e"
  done
done


tt1.sh[8]: syntax error at line 1 : `(' unexpected
# 4  
Old 10-29-2009

You must be using ksh88 or pdksh. Try this:

Code:
for element in "${MASTERARRAY[@]}"
do
  case $element in END_OF_ARRAY) break;; esac
  eval "set -- \"\${${element%_*}[@]}\" "
  for e
  do
      case $e in END_OF_ARRAY) break;; esac
      printf "\nArray: %s\n" "$e"
  done
done

# 5  
Old 10-29-2009
I am assuming I am running ksh88. I don't have KSH_VERSION variable defined.

Code:
#!/usr/bin/ksh
set +A MASTERARRAY SQLUPDATE SQLUPDATE2 END_OF_ARRAY
set +A SQLUPDATE_DAILY  update12 update22
set +A SQLUPDATE_ONETIME  update32 update42
for element in "${MASTERARRAY[@]}"
do
  case $element in (END_OF_ARRAY) break;; esac
  eval "set -- \"\${${element}[@]}\" "
  for e
  do
      case $e in (END_OF_ARRAY) break;; esac
      printf "\nArray: %s\n" "$e"
  done
done

1. I added extra parenthesis in front of END_OF_ARRAY
2. When I run the script. I don't get any error message but nothing prints

Previous Thread | Next Thread
Test Your Knowledge in Computers #715
Difficulty: Easy
A stored-program computer is a computer that stores program instructions on external hard drives..
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Arrays in Shell Scripts

I have defined an array like this: set -A MYARRAY MYARRAY=file1 MYARRAY=file2 MYARRAY=file3 MYARRAY=file4 i=0 while } ]] do echo "File Name $i :" ${MYARRAY} i=`expr $i + 1 ` echo "value of i=" $i done This works perfectly and shows... (4 Replies)
Discussion started by: Hangman2
4 Replies

2. Shell Programming and Scripting

Shell arrays need help

Ok so spaces separate elements. What if you wanted an element to have a space in it? For instance: nums="one two three and a half" where "three and a half" is THE SAME element? (3 Replies)
Discussion started by: stevenswj
3 Replies

3. Shell Programming and Scripting

Shell script for 2 arrays

I have 2 arrays abc and xyz abc = ( a b c d e f g h i j k l m n o p q r s t u v w x y z ) and xyz = ( b c d e f ) lets assume a .... z are the file name. I have to perform a pattern replacement on each file present in abc array accept the files i have in xyz array. and i am doing... (4 Replies)
Discussion started by: kukretiabhi13
4 Replies

4. Shell Programming and Scripting

arrays in C shell

hi guys, i have the following code in C shell.. set i=0 while ($i < 11) master_array=${ARRAY} i++ done it gives me error at line 3: Variable syntax. what is wrong here? any help is appreciated. (4 Replies)
Discussion started by: npatwardhan
4 Replies

5. Shell Programming and Scripting

I need help with arrays in C Shell

Hi guys could you please post links that explain how to use and manipulate arrays in c shell (.csh files) ? examples are useful too :rolleyes: (5 Replies)
Discussion started by: domain
5 Replies

6. Shell Programming and Scripting

C shell arrays

how do you declare an array in the C shell and loop through each element? (2 Replies)
Discussion started by: npatwardhan
2 Replies

7. Shell Programming and Scripting

shell / awk arrays

I have a bash shell script that sources a data file, the data file has array values such as: #--data file ---# sg_name="db1" sg_size="12892" sg_allow="50000" sg_name="db2" sg_size="12892" sg_allow="50000" export sg_name sg_size sg_allow #--end data file --# In my shell script... (8 Replies)
Discussion started by: lochraven
8 Replies

8. Shell Programming and Scripting

how to use arrays in c shell

hi :) i need help to explain arrays 2D in c shell like this in c++ int a (6 Replies)
Discussion started by: hgphsf
6 Replies

9. Shell Programming and Scripting

arrays in shell script

Hi, can we use arrays in shell script? I have this so far: #!/bin/sh isql -Usa -P -S DBSERVER -o output << EOF sp_transactions "state", "prepared", "xactname" go / EOF the file 'output'' will be have many entries and I want to caputre the transaction names only: grep 000 output works... (3 Replies)
Discussion started by: melanie_pfefer
3 Replies

10. Shell Programming and Scripting

Bourne Shell and Arrays

Hi everyone, first post here so please be gentle :-) I normally likle to script in Bourne Shell simply for guarenteed compatibility across any system I might run across but this latest problem has me stumped. Arrays is a rather significant construct missing from sh and after finding a way to... (2 Replies)
Discussion started by: Unbeliever
2 Replies

Featured Tech Videos