Function Returns


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Function Returns
# 1  
Old 08-12-2016
Function Returns

I'm having a little trouble returning a value from a function or calling it, I'm not quite sure.

I'm calling the function here
Code:
function region_lookup_with_details {
        results = $(set_region)
        echo $results
}

This is the function I'm calling
Code:
function set_region {
        zonecheck eq 0
        while $zonecheck eq 0
        do
                echo "Please enter the region you want to use\n"
                read zone
                if $zone eq 4 || $zone eq 5 || $zone eq 6 || $zone eq 7  || $zone eq 10 || $zone eq 11 || $zone eq 20 || $zone eq 21  || $zone eq 23 || $zone eq 25
                then
                        $zonecheck eq 1
                else
                        echo "That's not a region\n"
                fi
        done
        return $zone
}

This is the error I'm getting
Code:
./test[150]: region_lookup_with_details[57]:set_region[15]:2: not found [No such file or directory]


Last edited by rbatte1; 08-12-2016 at 11:13 AM.. Reason: Added CODE tags for final output
# 2  
Old 08-12-2016
That seems a strange syntax to me. What shell are you using?
# 3  
Old 08-12-2016
Code:
./test[150]: region_lookup_with_details[57]:set_region[15]:2: not found [No such file or directory]

To clarify, this is how I understand this error message:
  • it's a call from region_lookup_with_details(line 57)
  • next deeper call is set_region(line 15)
  • there the error message is 2: not found [No such file or directory]

I'm not sure what zonecheck is and what it does. But what I see is this:

Code:
zonecheck eq 0
while $zonecheck eq 0

You call it as function/command/alias. Next line you call a variable with the same name. Is that a typo?
# 4  
Old 08-12-2016
zonecheck is just purely a local variable to hold the while loop in place so it continues to make sure your using a valid zone.

As to the first question I'm using ksh, but might be getting bash mixed in by accident my scripting skills aren't overly great.
# 5  
Old 08-12-2016
On top of several syntax errors:

Code:
function region_lookup_with_details {
        results = $(set_region)                         # ---> returns=$(set_region)
        echo $results
}



function set_region {
        zonecheck eq 0                                  # ---> zonecheck=0
        while $zonecheck eq 0                           # ---> while [ ... ]
        do
                echo "Please enter the region you want to use\n"
                read zone
                if $zone eq 4 || $zone eq 5...          # ---> if [ ... ]; [ $zone -eq 4 ]
                then
                        $zonecheck eq 1                 # ---> if [ ... -eq ... ]
                else
                        echo "That's not a region\n"
                fi
        done
        return $zone
}

, you have the logical error that the "command substitution" will replace the function with its output to stdout while the (exit) code conveyed by the return command can be retrieved in the $? parameter.
# 6  
Old 08-12-2016
Quote:
, you have the logical error that the "command substitution" will replace the function with its output to stdout while the (exit) code conveyed by the return command can be retrieved in the $? parameter.
Thanks so much, and just so I understand your quote above. Does this mean that the $zone value I'm returning from the function set_region will just be wiped out everytime?

Also does this look better for the if statement, I'm not sure if || means or, because I'm only looking for those numbers?
Code:
if [$zone eq 4] || [$zone eq 5] || [$zone eq 6] || [$zone eq 7] || [$zone eq 10] || [$zone eq 11] || [$zone eq 20] || [$zone eq 21] || [$zone eq 23] || [$zone eq 25]
then
                        $zonecheck=1
                else
                        echo "That's not a region\n"
                fi

---------- Post updated at 04:01 PM ---------- Previous update was at 03:31 PM ----------

Now it just hangs and throws the same error when you hit enter.

Using comments might be easier for me to explain what I'm trying to do:

#A function to call another function to get a user to enter a valid region in a variable
#Use that variable in another command
#Print out the results from the command

#A function for getting the users region and making sure it's in a valid list
#Request the user input a region and get it in a variable
#A while loop that keep going as long as the user input doesn't match a valid region
#A for loop to test the user input against the valid regions
#Matching with a valid region exit the while loop
#Not matching rerun through the while loop
#Return the zone that was found to be valid

Last edited by akechnie; 08-12-2016 at 05:09 PM..
# 7  
Old 08-12-2016
Saying you're getting an error when you hit return without showing us the exact error you are getting wastes all of our time and delays getting help from us. But, in this case it is obvious that you still have the syntax errors in the tests in your if statement, ksh (and any other shell conforming to the standards) requires whitespace separating all of the arguments in a test command (AKA [ expression ] command), and the numeric equal comparison operator in that expression is -eq; not eq. This might come closer to what you're trying to do, but without seeing how you are calling the functions you're talking about and seeing how you're testing the results produced by this code segment, we don't know whether or not it will do what you need:
Code:
if [ $zone -eq 4 ] || [ $zone -eq 5 ] || [ $zone -eq 6 ] || [ $zone eq 7 ] || [ $zone -eq 10 ] || [ $zone -eq 11 ] || [ $zone -eq 20 ] || [ $zone -eq 21 ] || [ $zone -eq 23 ] || [ $zone -eq 25 ]
then
	$zonecheck=1
else
	echo "That's not a region\n"
fi

or with more readable lines:
Code:
if [ $zone -eq 4 ] || [ $zone -eq 5 ] || [ $zone -eq 6 ] || [ $zone eq 7 ] || \
    [ $zone -eq 10 ] || [ $zone -eq 11 ] || [ $zone -eq 20 ] || [ $zone -eq 21 ] || \
    [ $zone -eq 23 ] || [ $zone -eq 25 ]
then
	$zonecheck=1
else
	echo "That's not a region\n"
fi

and, for something with this many tests, a case statement might be a better choice than an if statement.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Exit always returns 0

This returns 0 even when it does not delete any files. Is it because -print returns 0? RETVAL=$? Docs_Backups=/media/andy/MAXTOR_SDB1/Ubuntu_Mate_18.04/Documents_Backups/ Scripts_Backups=/media/andy/MAXTOR_SDB1/Ubuntu_Mate_18.04/Script_Backups/ # create some old files #touch -d 20120101... (4 Replies)
Discussion started by: drew77
4 Replies

2. Shell Programming and Scripting

Help in function returns value

Hi, I need to return a value from the function. the value will be the output from cat command which uses random fucntion. #!/bin/ksh hello() { var1=$(`cat /dev/urandom| tr -dc 'a-zA-Z0-9-!%&()*+,-/:;<=>?_'|fold -w 10 | head -n 1`) echo "value is" var1 return var1 } hello var=$?... (2 Replies)
Discussion started by: Nandy
2 Replies

3. Shell Programming and Scripting

Function returns a value but cannot be stored in other variable

I need help to store the value returned from the function to one variable and then use that variable. PREVIOUS_DATE_FUNCTION() { date '+%m %d %Y' | { read MONTH DAY YEAR DAY=`expr "$DAY" - 1` case "$DAY" in 0) MONTH=`expr "$MONTH" - 1` case... (1 Reply)
Discussion started by: aroragaurav.84
1 Replies

4. Shell Programming and Scripting

Calculation returns no value

#/bin/sh ..... #convert memory to MB let "mmsize_a= ($mmsize)/256" let "mminuse_a= ($mminuse)/256" let "mmfree_a= ($mmsize_a -$mminuse_a)" let "mmfreepercent= (($mmfree_a)/($mmsize_a))*100" # #format output echo "\n\n######################" >>$sndFile echo "\n$sysName Total Memory usage"... (3 Replies)
Discussion started by: Daniel Gate
3 Replies

5. UNIX for Dummies Questions & Answers

dlsym() returns 0 for an existing function

Sometimes I observe this in gdb: (gdb) br my_function Breakpoint .. at 0x...: file ..., line ... i.e., "my_function" does exist in the current executable. however, dlsym does not find it: (gdb) p dlsym(0,"my_function") $6 = 0 This is a C program; dlsym does find other defined functions and... (2 Replies)
Discussion started by: sds
2 Replies

6. Shell Programming and Scripting

Grep returns nothing

Hi all, I am trying to grep a .txt file for a word. When I hit enter, it returns back to $ The file is 4155402 in size and is named in this way: *_eveningtimes_done_log.txt I use this command, being in the same directory as the file: grep -i "invalid" *_eveningtimes_done_log.txt ... (16 Replies)
Discussion started by: DallasT
16 Replies

7. Shell Programming and Scripting

Function returns wrong values - solved

Hi I have a small function which returns a wrong value. The function tries to make a connection to oracle database and tries to get the open_mode of the database in the variable status. However when a database is down the value of the status column is set to READWRITE i am not sure why. I... (0 Replies)
Discussion started by: xiamin
0 Replies

8. UNIX for Dummies Questions & Answers

Grep without returns...

Is there a command where I can pipe my grep into it and it will output it with spaces rather than returns? Example I want to turn prompt$ grep blah file blah blah into this prompt$ grep blah file | someCommand blah blah (1 Reply)
Discussion started by: mrwatkin
1 Replies

9. Shell Programming and Scripting

function returns string

Can I create a function to return non-interger value in shell script? for example, function getcommand () { echo "read command" read command echo $command } command=$(getcommand) I tried to do something as above. The statement echo "read command" does not show up. ... (5 Replies)
Discussion started by: lalelle
5 Replies
Login or Register to Ask a Question