Sponsored Content
Full Discussion: Loop through variables
Top Forums Shell Programming and Scripting Loop through variables Post 302840011 by Don Cragun on Sunday 4th of August 2013 04:14:50 AM
Old 08-04-2013
Quote:
Originally Posted by biobill
I ended up getting it working. I wish the exclamation point piece of code would work on our box. Would have saved me hours of searching on the net.

This is wheat I ended up with. Might be a little crude but it works.

Code:
i=1
last=36
while [[ $i -le $last ]]
do
src_file="src_file"
ctl="_ctl"
eval src_file_name="\$src_file_$i"
eval ctl_file_name="\$src_file_$i$ctl"
      
    echo "************************************************************************" >> ${cron_log} 
    echo "File Details" >> ${cron_log}
    echo "------------------------------------------------------------------------" >> ${cron_log}
    echo "File Name: ${src_file_name}.csv" >> ${cron_log}
    echo "File Location: ${cron_dir}" >> ${cron_log}
    FILE_LINE_COUNT=`wc -l < ${cron_dir}/${src_file_name}.csv`
    echo "File Line Count:  $FILE_LINE_COUNT"   >> ${cron_log}
    echo " "  >> ${cron_log}
  
    echo "------------------------------------------------------------------------" >> ${cron_log}
    echo "Data Load Details:" >> ${cron_log}
    $ORACLE_HOME/bin/sqlldr ${ORA_DBCU}/${ORA_DBCP} control=${control_dir}/${ctl_file_name}.ctl
    grep -i "logical records read" ${cron_dir}/${ctl_file_name}.log >> ${cron_log}
    grep -i "logical records skipped" ${cron_dir}/${ctl_file_name}.log >> ${cron_log}
    grep -i "successfully loaded" ${cron_dir}/${ctl_file_name}.log >> ${cron_log}tina
    grep -i "not loaded" ${cron_dir}/${ctl_file_name}.log >> ${cron_log}
    echo " " >> ${cron_log}
    err_cnt=`grep "not loaded due to data error"  ${cron_dir}/${ctl_file_name}.log | cut -f3-3 -d" "`
    echo "Records not loaded due to errors: $err_cnt" >> ${cron_log}
    echo " " >> ${cron_log}
    
if ${src_file_name} -eq ${src_file_1}
then
      tot_err_cnt=$err_cnt
else
      tot_err_cnt=$(($tot_err_cnt+$err_cnt))
fi
  i=$(($i+1))
done

I'm glad it is working for you, but I'm surprised that the line I marked in red is working. It looks like you intended to execute test with the three operands trying to determine if two filenames were the same. But:
  1. you are missing the test or [ and ] that would be required to make it a test command, and
  2. when comparing strings, you should use = (or == if you were using [[ and ]] instead of test) instead of -eq.
The way you have this if statement written, it is executing the 1st filename with the two arguments -eq and the 2nd filename. If that returns a zero exit status, the then branch is executed; otherwise the else branch is executed.

If the intent was to use one branch the 1st time through the loop, why not test for the value of i being 1 instead of comparing filenames? You might consider changing:
Code:
if ${src_file_name} -eq ${src_file_1}
then
      tot_err_cnt=$err_cnt
else
      tot_err_cnt=$(($tot_err_cnt+$err_cnt))
fi
  i=$(($i+1))

close to the end of your script to:
Code:
    if [ $i -eq 1 ]
    then
        tot_err_cnt=$err_cnt
    else
        ((tot_err_cnt += err_cnt))
    fi
    ((i++))

This User Gave Thanks to Don Cragun For This Post:
 

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 10:12 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy