Sponsored Content
Top Forums Shell Programming and Scripting Array Length Reports as Having Length when it is Empty? Post 302700471 by mrm5102 on Thursday 13th of September 2012 12:08:26 PM
Old 09-13-2012
Array Length Reports as Having Length when it is Empty?

Hello All,

I have this script that does stuff like "starting, stopping & restarting" a Daemon Process running on my machine...

My main question is why in part of my code (which you will see below) does the Array Length (i.e. ${#PIDS[@]} )
return "1" when I know the Array is empty..?

Here is a little explaination of the problem...
Occasionally when runnning the "ps auxww" command the output finds more than one instance of the Daemon. Because of
this I save the PID(s) into an array (which is declared at the start of the script), then inside a function I
save the PID(s) into that array. Like this below...

For Example:
Code:
### Declare the Array for the PID(s)
declare -a PIDS

    :
    :
.... Other Code ....
    :
    :

### START: Function check_ps()...
#####################################
check_ps()
{
    ### Reset ${PIDS[]} to nothing...
    PIDS=""

    ### Save the Output into an array:
    PS_OUTPUT=( $(ps auxww | grep -v grep | grep "/usr/local/bin/Daemon_Process") )

    ### If this array is NOT empty, then start saving the PIDs
    if [ ! -z $PS_OUTPUT ]
     then
        x=0
        for line in "${PS_OUTPUT[@]}"
         do
            PIDS[$x]=$(echo "$line" | awk -F ' ' {'print $2'})
            x=$(($x+1))
        done
    else
        echo "The Daemon is NOT Running!"
    fi
}    
#####################################
### END: Function check_ps()...

Now if I pass the "stop" argument to the script, after I collect all the PIDs using the code above, I then try to
kill the PIDs. Like this...

Code:
stop_daemon()
{
    # Call Function check_ps to get the PIDs
    check_ps

    ### If the Array PIDS contains data, then...
    if [ ${#PIDS[@]} -gt 0 ]
     then
        ### While The Array still contains data, do...
        while [ ${#PIDS[@]} -ne 0 ]
         do
            ### PRINT SOME STUFF FOR TESTING...
            echo "LENGTH = ${#PIDS[@]}"
            echo -e "ELEMENT 0 = \"${PIDS[0]}\"\n"

            kill ${PIDS[0]}
            KILL_RETCODE=$?

            ### Re-Check 'ps auxww' for the daemon
            check_ps
        done
    fi
}

Ok so, I was testing in the while loop in the "stop_daemon()" Function above. Lets say that there was only one PID found.
I had issued some echo commands to see what the values of the variables were since it seemed that it was an endless
loop. I echoed out the Length of the array (i.e. ${#PIDS[@]}) and it ONLY prints "1" everytime, and I also print the
first element of the array (i.e. ${PIDS[0]} ) which prints nothing AFTER the first iteration through the loop.

Example Output:
Code:
LENGTH = 1
ELEMENT 0 = "25589"

LENGTH = 1
ELEMENT 0 = ""

LENGTH = 1
ELEMENT 0 = ""

LENGTH = 1
ELEMENT 0 = ""

LENGTH = 1
ELEMENT 0 = ""
^C            --> HAVE TO KILL THE SCRIPT TO STOP THE LOOP.

Does anyone know why this loop never terminates? I know some of you will say that I don't need an array since I'm re-checking
the 'ps auxww' output on each loop, but I needed the array in another section of my script. Even still I feel like the loop
should be terminating since it has no elements... I think?

Any thoughts would be great!

Thanks in Advance,
Matt
 

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

creating a fixed length output from a variable length input

Is there a command that sets a variable length? I have a input of a variable length field but my output for that field needs to be set to 32 char. Is there such a command? I am on a sun box running ksh Thanks (2 Replies)
Discussion started by: r1500
2 Replies

2. UNIX for Dummies Questions & Answers

Sed working on lines of small length and not large length

Hi , I have a peculiar case, where my sed command is working on a file which contains lines of small length. sed "s/XYZ:1/XYZ:3/g" abc.txt > xyz.txt when abc.txt contains lines of small length(currently around 80 chars) , this sed command is working fine. when abc.txt contains lines of... (3 Replies)
Discussion started by: thanuman
3 Replies

3. UNIX for Dummies Questions & Answers

Length of a Unix filepath max length

Hi Guys, Could anyone shed some light on the length of a Unix filepath max length pls ? thanks ! Wilson (3 Replies)
Discussion started by: wilsontan
3 Replies

4. UNIX for Dummies Questions & Answers

What the command to find out the record length of a fixed length file?

I want to find out the record length of a fixed length file? I forgot the command. Any body know? (9 Replies)
Discussion started by: tranq01
9 Replies

5. Shell Programming and Scripting

Make variable length record a fixed length

Very, very new to unix scripting and have a unique situation. I have a file of records that contain 3 records types: (H)eader Records (D)etail Records (T)railer Records The Detail records are 82 bytes in length which is perfect. The Header and Trailer records sometimes are 82 bytes in... (3 Replies)
Discussion started by: jclanc8
3 Replies

6. Shell Programming and Scripting

changing a variable length text to a fixed length

Hi, Can anyone help with a effective solution ? I need to change a variable length text field (between 1 - 18 characters) to a fixed length text of 18 characters with the unused portion, at the end, filled with spaces. The text field is actually field 10 of a .csv file however I could cut... (7 Replies)
Discussion started by: dc18
7 Replies

7. Shell Programming and Scripting

Generate 100 Character Fixed Length Empty File

Hello Everyone, I'm running AIX 5.3 and need to generate a 100 character fixed length empty file from within a bash script that I am developing. I searched and was able to find: dd if=/dev/zero of=/test/path/file count=100 however my understanding is that this will generate a file of a... (10 Replies)
Discussion started by: jvt
10 Replies

8. Shell Programming and Scripting

Flat file-make field length equal to header length

Hello Everyone, I am stuck with one issue while working on abstract flat file which i have to use as input and load data to table. Input Data- ------ ------------------------ ---- ----------------- WFI001 Xxxxxx Control Work Item A Number of Records ------ ------------------------... (5 Replies)
Discussion started by: sonali.s.more
5 Replies

9. Shell Programming and Scripting

Convert variable length record to fixed length

Hi Team, I have an issue to split the file which is having special chracter(German Char) using awk command. I have a different length records in a file. I am separating the files based on the length using awk command. The command is working fine if the record is not having any... (7 Replies)
Discussion started by: Anthuvan
7 Replies
All times are GMT -4. The time now is 10:06 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy