passing argument from one function to another


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting passing argument from one function to another
# 1  
Old 08-31-2012
passing argument from one function to another

Hi all,
In the given script code [1].
I want to pass the maximum value that variable "i" will have in function DivideJobs () to variable $max of function SubmitCondorJob().

Any help?
Thanks

Code:
#!/bin/bash                                                                                                                                                            
date
PATHNAME=/eos/uscms/store/user/pooja04//analysis2012/525/data/doubleele/2012/datav1/
FileName=DataFileName
#TARGETPATH=                                                                                                                                                           
SCRIPT=DataMc.sh
TEMPSCRIPT=Temp.sh
CARD=card_Data2011AB_Zee_40GeV
CondorJob=Job_condor

CopyFilesInfo() {
#    ls -ltr "$PATHNAME" | grep root | awk '{print string path $9}' string="$CONSTANT" path="$1"  > "$FileName"                                                        
    ls -ltr $PATHNAME grep root | awk '{print "$PATHNAME"$9}' > "$FileName"
    echo "FileName are Copied"
}


DivideJobs() {
    echo "Division Of Jobs"
    #split -$4  $3 chunk                                                                                                                                               
    split -10  $FileName chunk

    i=0
    for file in chunk*
      do
      ((i=i+1))
      new_file="data"$i".list"
      perl -0pe 's/\n$//' $file >  $new_file

      #to remove the processed file                                                                                                                                    
      rm -rf $file
      echo $i ' succesful'
    done
}

#For Submiting the jobs                                                                                                                                           
SubmitCondorJob () {
    max=$2
    for (( i=0; i<=$max; ++i )) ;
      do
      echo "SHELL SCRIPTING ================ $i =============="
      new_file="temp"$i".sh"
      cp $SCRIPT $new_file

      if [ $i == 0 ]; then
          source $new_file
          pause 'Press [Enter] key to continue...'
          rm $new_file
      else
          if [ $i > 0 ]; then
              { rm $CARD; sed -e "s/file$i/file$((i+1))/g" > $CARD; } < $CARD
              source $new_file
              pause 'Press [Enter] key to continue...'
              rm $new_file
          else
              echo "SUCCESFULLY DONE.."
          fi
      fi
    done
}

if ["$1" = "condorjob" ]; then
    path
    CopyFilesInfo
    DivideJobs
    SubmitCondorJob
    exit 0
fi

# 2  
Old 08-31-2012
Just change the 'max' assignment at the beginning of "SubmitCondorJob" to use $i since you do not have it declared as a local variable to function(DivideJobs):
Code:
max=$i

# 3  
Old 08-31-2012
You can use spacebar's solution..

Also you simply define the variable in DivideJobs function

Code:
DivideJobs() { 

max=$i
}

# 4  
Old 09-01-2012
Hi, Thanks for the replies.

I changed the code and made the following changes [1]. The Error I am facing is following:
Code:
 ./Script4JobSubmit.sh: line 96: ((: k <  : syntax error: operand expected (error token is " ")

Even I change the k <= $max it does not help.


pooja

Code:
#!/bin/bash
date

# Global Parameters
#PATHNAME=/eos/uscms/store/user/pooja04//analysis2012/525/data/0001/data/30Aug2012/   #533
PATHNAME=/eos/uscms/store/user/pooja04//analysis2012/525/data/doubleele/2012/datav1/
FileName=DataFileName
SCRIPT=DataMC.sh
TEMPSCRIPT=temp.sh
CARD=card_Data2011AB_Zee_40GeV
CondorJob=Job_condor
max=$i

function pause(){
   read -p "$*"
}

usage () {
    echo "Script to submit offline batch mode jobs"
    echo "Possible arguments:"
    echo "  batchjob - to submit batch jobs"
    echo "  condorjob - to submit batch jobs"
    echo "  help - shows this help"
    echo "   ./Script4OfflineJobs.sh batchjob"
}

# this sets CLASSPATH                                                                                                                                                  
path () {
    source /uscms/home/pooja04/.bashrc
    source /uscms/home/pooja04/ToBegin.sh
    cd /uscms_data/d3/pooja04/CMSSW_5_3_3_patch2/src/ElectroWeakAnalysis/MultiBosons/test
    cmsenv
    cd /uscms/home/pooja04/script/AnalysisCode/Code42012/v2
}


#To Copy the Files Inforamtion from the Destination Folder
CopyFilesInfo() {
    ls -ltr "$PATHNAME" | grep root | awk '{print string path $9}' string="$CONSTANT" path="$PATHNAME"  > "$FileName"
#    ls -ltr $PATHNAME |  grep root | awk '{print "$PATHNAME"$9}' > "$FileName"
    echo "FileName are Copied"
}

#Divide the jobs in small files
DivideJobs() {
    echo "Division Of Jobs"
    #split -$4  $3 chunk
    split -10  $FileName chunk
    
    i=0
    for file in chunk*
      do
      ((i=i+1))
      new_file="data"$i".list"
      perl -0pe 's/\n$//' $file >  $new_file
      rm -rf $file
      echo $i ' succesful'
    done
}

#For Submiting the batchjobs
SubmitBatchJob () {
    for (( k=0; k<= "$max" ; ++k )) ; 
      do
      echo "SHELL SCRIPTING ================ $i ==============" 
      new_file="temp"$k".sh"
      cp $SCRIPT $new_file
      
      if [ $k == 0 ]; then
	  source $new_file
	  pause 'Press [Enter] key to continue...'
	  rm $new_file
      else
	  if [ $k > 0 ]; then
	      { rm $CARD; sed -e "s/data$i/data$((k+1))/g" > $CARD; } < $CARD
	      source $new_file
	      pause 'Press [Enter] key to continue...'
	      rm $new_file
	  else
	      echo "SUCCESFULLY DONE.."
	  fi
      fi
    done
}    


#For Submiting the batchjobs
SubmitCondorJob () {

    for (( k=0; k < $max ; k++ ))
      do
      echo "CondorJob Submission For  ================ $i ==============" 
      new_file="temp"$k".sh"

      if [ $k == 0 ]; then
#      cp $SCRIPT $TEMPSCRIPT
	  echo "$SCRIPT"
	  cp $SCRIPT "temp.sh"

	  condor_submit $CondorJob
#	  rm $TEMPSCRIPT
	  rm "temp.sh"
	  echo "Going To Sleep.."
	  sleep 100
      else
	  if [ $k > 0 ]; then
	      { rm $CARD; sed -e "s/data$i/data$((k+1))/g" > $CARD; } < $CARD
	 #     cp $SCRIPT $TEMPSCRIPT 
	      cp $SCRIPT "temp.sh"
	      condor_submit $CondorJob
#	      rm $TEMPSCRIPT
	      rm "temp.sh" 
	      echo "Going To Sleep.."
	      sleep 100
	      echo "SUCCESFULLY DONE.."
	  fi
      fi
    done
}    

if [ $# -lt 1 ]; then
    usage
    exit 1
fi

if [ $1 = "help" ]; then
    usage
    exit 0

elif [ "$1" = "batchjob" ]; then
    path  
    CopyFilesInfo
    DivideJobs
    SubmitBatchJob
    exit 0

elif [ "$1" = "condorjob" ]; then
#    path
    CopyFilesInfo 
    DivideJobs
    SubmitCondorJob
    exit 0
fi

# 5  
Old 09-01-2012
In the beginning, the variable max has been assigned the value of i (which at that particular instant has not been set, I assume). Hence, the error in the for loop. Assign a proper numeric value to max. Also, that is an arithmetic for loop so no need to double-quote values. If you still want to go ahead with a null value, use typeset on max:
Code:
typeset -i max=$i

# 6  
Old 09-01-2012
At the start defining max=$i doesn't make sense... at start where you have not defined i yet...

Have you tried with spacebar's or mine solution..?
# 7  
Old 09-01-2012
I defiend this at the begginng of the script as :
Code:
 TEMPSCRIPT=temp.sh
CARD=card_Data2011AB_Zee_40GeV
CondorJob=Job_condor
typset -i max=$i

Quote:
Originally Posted by elixir_sinari
In the beginning, the variable max has been assigned the value of i (which at that particular instant has not been set, I assume). Hence, the error in the for loop. Assign a proper numeric value to max. Also, that is an arithmetic for loop so no need to double-quote values. If you still want to go ahead with a null value, use typeset on max:
Code:
typeset -i max=$i

Hi, thank for the quick reply.
but it did not work. The error is following:
Code:
 [pooja04@cmslpc14 v2]$ ./Script4JobSubmit.sh condorjob
Sat Sep  1 02:08:47 CDT 2012
./Script4JobSubmit.sh: line 18: typset: command not found
FileName are Copied
Division Of Jobs
1  succesful
2  succesful
3  succesful

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Passing a second argument

I am trying to pass a second argument like so: if ] then export ARG2=$2 else message "Second argument not specified: USAGE - $PROGRAM_NAME ARG1 ARG2" checkerror -e 2 -m "Please specify if it is a history or weekly (H or W) extract in the 2nd argument" fi however, it always goes... (4 Replies)
Discussion started by: MIA651
4 Replies

2. Programming

Parameter passing to function with void * as Argument

Earlier I had one structure C typedef struct c { int cc; }CS; I used to call a library function say int GetData(CS *x) which was returning me the above structure C with data. GetData(CS *x) Function call used to be like: CS CSobj; GetData(&CSObj); Now there are two... (12 Replies)
Discussion started by: rupeshkp728
12 Replies

3. Shell Programming and Scripting

Argument passing

How to pass the alphabet character as a argument in case and in if block? ex: c=$1 if a-z ]] then echo "alphabet" case $1 in a-z) echo "the value is a alphabet" edit by bakunin: please use CODE-tags. We REALLY mean it. (9 Replies)
Discussion started by: Roozo
9 Replies

4. Shell Programming and Scripting

Help with passing argument

Hi, I have a script that is scheduled with cron and runs every night. The cron part looks like this: 00 20 * * 0,1,2,3,4,5,6 /usr/local/bin/BACKUP TBTARM HOT DELETE My issue is with the 3rd parameter. Somewhere in the script, i want to tell the script to delete some files if the 3rd... (7 Replies)
Discussion started by: dollypee
7 Replies

5. Shell Programming and Scripting

pass function as argument to a function

I have the following code : function1 () { print "January" } function2() { case $1 in January) print "Dzisiaj mamy styczen" ;; *) ;; } main() { (1 Reply)
Discussion started by: presul
1 Replies

6. Shell Programming and Scripting

Passing commandline argument to a function

Hi, I have 2 ksh scripts. Script1.ksh contains function definition. script1.ksh function f1() { while getopts a:c: args do case $args in a) ARG1=$OPTARG ;; c) ARG2=$OPTARG ;; \?) echo "Error no valid Arguments passed" esac done echo $ARG1 echo $ARG2 script2.sh (2 Replies)
Discussion started by: siba.s.nayak
2 Replies

7. Shell Programming and Scripting

passing Argument

Hi All, i have script like below.. echo "1) first option" echo "" echo "2) second option" echo "" echo "*) please enter the correct option" read select case $select in 1) echo "first option selected" ;; 2) echo "second option selected" ;; *) echo "please enter the correct... (4 Replies)
Discussion started by: Shahul
4 Replies

8. Shell Programming and Scripting

Passing global variable to a function which is called by another function

Hi , I have three funcions f1, f2 and f3 . f1 calls f2 and f2 calls f3 . I have a global variable "period" which i want to pass to f3 . Can i pass the variable directly in the definition of f3 ? Pls help . sars (4 Replies)
Discussion started by: sars
4 Replies

9. Shell Programming and Scripting

Passing more than one argument in a function

Hi All, Calling a function with one argument and storing the return value in a shell script is as below:( so far I know) value="`fun_1 "argument1"`" Its working perfectly for me. Can u help me with passing more than one argument and storing the return value Thnaks in advance JS (1 Reply)
Discussion started by: jisha
1 Replies

10. UNIX for Dummies Questions & Answers

Passing Argument to Function

May i know how to pass an argument to a function in a shell script? Sorry, i din stated that it is in a shell script in my previous post. Means: checkStatus() { ........... } read status; I wanna use the status in the function checkstatus, how... (2 Replies)
Discussion started by: AkumaTay
2 Replies
Login or Register to Ask a Question