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
# 43  
Old 09-04-2012
Quote:
Originally Posted by nrjrasaxena

may i ask the significance of having "" ..???
"" will be useful if your variable having space...

My above given code works perfect for your file list..

Code:
echo "data1.list
data2.list
data3.list" | sed  's/data[a-zA-Z0-9]*/data1/g'
data1.list
data1.list
data1.list

This User Gave Thanks to pamu For This Post:
# 44  
Old 09-04-2012
Quote:
Originally Posted by nrjrasaxena
..ummm, may i ask the significance of having "" ..???
Always keep in mind that the shell "expands" variables before evaluating a line. That means that an expression like "$var" will be replaced by the contents of this variable. The default content of a variable is the null string, now. Consider the following code:

Code:
x="foo"
if [ $x = foo ] ; then
...

The shell will do the following: it will first replace "$x" with "foo" and only then evaluate the line:

Code:
if [ foo = foo ] ; then

Of course this evaluates to "TRUE" and the if-branch will be executed (the else-branch in case it evaluates to "FALSE"). Now suppose that "$x" is not given a value:

Code:
# this commented so that it has no effect: # x="foo"
if [ $x = foo ] ; then
...

The shell would evaluate the line in question to:

Code:
if [  = foo ] ; then

and this is simply a syntactical error. The comparison lacks a part to which to compare to. Now consider the same with quotes:

Code:
x=foo
if [ "$x" = "foo" ] ; then
...

gives:
Code:
if [ "foo" = "foo" ] ; then

and

Code:
# this commented out # x=foo
if [ "$x" = "foo" ] ; then
...

gives

Code:
if [ "" = "foo" ] ; then

Which will now be "FALSE", but still be syntactically correct.

This is why it is good to ALWAYS quote your variables.

I hope this helps.

bakunin
This User Gave Thanks to bakunin For This Post:
# 45  
Old 09-04-2012
Hi,
In the process of modification of my script, the step next problem is following, I Would like to incorporate the following changes..but does not seem to work !
I am not sure where to define the PATHNAME variable..??? I tried several options, did not work.

Sorry for bothering so much, its kind of first script that I am writing..:P

Code:
PATH525[1]="/eos/uscms/store/user/pooja04//analysis2012/525/data/doubleele/2012/datav1/"
PATH525[2]="/eos/uscms/store/user/pooja04//analysis2012/525/data/doubleele/2012/datav4/"
PATHZY[1]="/eos/uscms/store/user/pooja04//analysis2012/533/mc/zgammav1/"
                                                                                                                                                         
PATH533[1]="/eos/uscms/store/user/pooja04//analysis2012/533/data/datav14/"

CopyFiles() {
    if [ "$2" = "525" ]; then
        $PATHNAME = "$PATH525"
    elif [ "$2" = "533" ]; then
        $PATHNAME = "$PATH533"
    elif [ "$2" = "ZY" ]; then
        $PATHNAME = "$PATHZY"
    fi
    echo "pathname is $PATHNAME"
    for FileNameIndx in "${PATHNAME[@]}"
          do
          if [[ ! -e "dest_path/$FileNameIndx" ]]; then
              ls -ltr "$FileNameIndx" | grep root | awk '{print string path $9}' string="$CONSTANT" path="$FileNameIndx"  >> "$FileName"
              echo "$FileNameIndx is copied"
          else
              echo "Check the FileName in ${PATHNAME[@]}"
          fi
        done
}

thanks

---------- Post updated at 01:00 PM ---------- Previous update was at 12:54 PM ----------

Thanks for the detailed information..:-)

Quote:
Originally Posted by bakunin
Always keep in mind that the shell "expands" variables before evaluating a line. That means that an expression like "$var" will be replaced by the contents of this variable. The default content of a variable is the null string, now. Consider the following code:

Code:
x="foo"
if [ $x = foo ] ; then
...

The shell will do the following: it will first replace "$x" with "foo" and only then evaluate the line:

Code:
if [ foo = foo ] ; then

Of course this evaluates to "TRUE" and the if-branch will be executed (the else-branch in case it evaluates to "FALSE"). Now suppose that "$x" is not given a value:

Code:
# this commented so that it has no effect: # x="foo"
if [ $x = foo ] ; then
...

The shell would evaluate the line in question to:

Code:
if [  = foo ] ; then

and this is simply a syntactical error. The comparison lacks a part to which to compare to. Now consider the same with quotes:

Code:
x=foo
if [ "$x" = "foo" ] ; then
...

gives:
Code:
if [ "foo" = "foo" ] ; then

and

Code:
# this commented out # x=foo
if [ "$x" = "foo" ] ; then
...

gives

Code:
if [ "" = "foo" ] ; then

Which will now be "FALSE", but still be syntactically correct.

This is why it is good to ALWAYS quote your variables.

I hope this helps.

bakunin
# 46  
Old 09-04-2012
hi

variable assignment should be like this

Code:
Pathname = "$paths"

---------- Post updated at 11:32 PM ---------- Previous update was at 11:31 PM ----------

Quote:
Originally Posted by nrjrasaxena
Hi,
In the process of modification of my script, the step next problem is following, I Would like to incorporate the following changes..but does not seem to work !
I am not sure where to define the PATHNAME variable..??? I tried several options, did not work.

Sorry for bothering so much, its kind of first script that I am writing..:P

Code:
PATH525[1]="/eos/uscms/store/user/pooja04//analysis2012/525/data/doubleele/2012/datav1/"
PATH525[2]="/eos/uscms/store/user/pooja04//analysis2012/525/data/doubleele/2012/datav4/"
PATHZY[1]="/eos/uscms/store/user/pooja04//analysis2012/533/mc/zgammav1/"
                                                                                                                                                         
PATH533[1]="/eos/uscms/store/user/pooja04//analysis2012/533/data/datav14/"

CopyFiles() {
    if [ "$2" = "525" ]; then
        $PATHNAME = "$PATH525"
    elif [ "$2" = "533" ]; then
        $PATHNAME = "$PATH533"
    elif [ "$2" = "ZY" ]; then
        $PATHNAME = "$PATHZY"
    fi
    echo "pathname is $PATHNAME"
    for FileNameIndx in "${PATHNAME[@]}"
          do
          if [[ ! -e "dest_path/$FileNameIndx" ]]; then
              ls -ltr "$FileNameIndx" | grep root | awk '{print string path $9}' string="$CONSTANT" path="$FileNameIndx"  >> "$FileName"
              echo "$FileNameIndx is copied"
          else
              echo "Check the FileName in ${PATHNAME[@]}"
          fi
        done
}

thanks

---------- Post updated at 01:00 PM ---------- Previous update was at 12:54 PM ----------

Thanks for the detailed information..:-)
# 47  
Old 09-04-2012
Quote:
Originally Posted by pamu
hi

variable assignment should be like this

Code:
Pathname = "$paths"

Hi,
thanks for such quick response.
ummm, I did declare it within the function and as a global variable..did not work !!
# 48  
Old 09-04-2012
Quote:
Originally Posted by nrjrasaxena
Hi,
thanks for such quick response.
ummm, I did declare it within the function and as a global variable..did not work !!

Declare variable in function thats fine just make sure before using thats variable you should assign value to it

and in above code you are doing

Code:
$A=$b # this will not assign value to A.

#just do like this.
A=$b

hope this helps you Smilie
# 49  
Old 09-04-2012
Quote:
Originally Posted by pamu
Declare variable in function thats fine just make sure before using thats variable you should assign value to it

and in above code you are doing

Code:
$A=$b # this will not assign value to A.

#just do like this.
A=$b

hope this helps you Smilie
How about this..??
Code:
CopyFiles() {
    PATHNAME="$paths"

    if [ "$2" = "525" ]; then
        PATHNAME="$PATH525"
    elif [ "$2" = "533" ]; then
        PATHNAME="$PATH533"
    elif [ "$2" = "ZY" ]; then
        PATHNAME="$PATHZY"
    fi
    echo "pathname is $PATHNAME"
    for FileNameIndx in "${PATHNAME[@]}"
          do
          if [[ ! -e "dest_path/$FileNameIndx" ]]; then
              ls -ltr "$FileNameIndx" | grep root | awk '{print string path $9}' string="$CONSTANT" path="$FileNameIndx"  >> "$FileName"
              echo "$FileNameIndx is copied"
          else
              echo "Check the FileName in ${PATHNAME[@]}"
 fi
        done
}

Not Working...!! The echo command not showing the value of the PATHNAME variable.

Last edited by nrjrasaxena; 09-04-2012 at 03:25 PM..
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