RE: shell script to count httpd processes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 

> -----Original Message-----
> From: redhat-list-bounces@xxxxxxxxxx 
> [mailto:redhat-list-bounces@xxxxxxxxxx] On Behalf Of Michael Velez
> Sent: Monday, March 14, 2005 5:53 PM
> To: 'General Red Hat Linux discussion list'
> Subject: RE: shell script to count httpd processes
> 
>  
> 
> > -----Original Message-----
> > From: redhat-list-bounces@xxxxxxxxxx
> > [mailto:redhat-list-bounces@xxxxxxxxxx] On Behalf Of Steve Buehler
> > Sent: Monday, March 14, 2005 3:35 PM
> > To: General Red Hat Linux discussion list
> > Subject: RE: shell script to count httpd processes
> > 
> > At 01:43 PM 3/14/2005, you wrote:
> > > > I am trying to create a shell script with /bin/sh that 
> will count 
> > > > how many httpd processes are running at the time.
> > > > This is how it would look as a perl script:
> > > > ---start of script---
> > > > #!/usr/bin/perl
> > > > $count = 0;
> > > > @hits = (`ps -afe | grep httpd | grep -v grep`);
> > > >    foreach $entry (@hits) {
> > > >      $count++;
> > > > }
> > > > print "$count\n";
> > > > ---end of script---
> > > >
> > > > I am trying to do this in an sh script.  Partly for
> > learning partly
> > > > because I want to do some other things to, but can only
> > know how to
> > > > do them in a shell script.  Any help would be greatly 
> appreciated.
> > >
> > >The following shell script should do the trick:
> > >
> > >--- start of script ---
> > >#!/bin/bash
> > >
> > >COUNT=`ps -aef | grep httpd | grep -c -v grep`
> > >
> > >echo $COUNT
> > >--- end of script ---
> > >
> > >If the reason for your question is to understand how to use
> > a for loop,
> > >the following script will also work:
> > >
> > >--- start of script ---
> > >#!/bin/bash
> > >PROCIDLIST=`ps -aef | grep httpd | grep -v grep | awk
> > '{print $2}'` for
> > >PROCID in $PROCIDLIST do
> > >         COUNT=$((COUNT+1))
> > >done
> > >
> > >echo $COUNT
> > >--- end of script
> > >
> > >Please note there is another syntax for the 'for' command,
> > which looks
> > >like the following:
> > >----
> > >for (( statement1;  statement2;  statement3)) do
> > >         statement block
> > >done
> > >----
> > >The above 'for' syntax works like the 'for' statement in C.
> > 
> > Steve, Brian and Michael.
> >          Thank you all for your responses.  I had tried the wc -l 
> > option and couldn't get it to work.  Figured it was because 
> it was for 
> > files.  It was just because I tried it in every way but the correct 
> > way.
> > Michael
> >          You gave me just what I was looking for.  A little 
> knowledge 
> > of the for loop.  Was hoping for a loop that would actually 
> count the 
> > lines and not the words though.  But your awk command 
> helped me there.  
> > I will continue hunting for an answer to my "learning 
> question" where 
> > I am just trying to find out how to count whole lines in a shell 
> > script variable.
> >  with a loop internally to the script without the wc command.
> > Thanks
> > Steve
> > 
> > 
> > --
> > redhat-list mailing list
> > unsubscribe 
> mailto:redhat-list-request@xxxxxxxxxx?subject=unsubscribe
> > https://www.redhat.com/mailman/listinfo/redhat-list
> > 
> 
> Steve,
> 
> If you want to know how to read one line at a time from a 
> variable and feed that line to your for loop, you can use the 
> following script:
> 
> --- start of script ---
> #!/bin/bash
> COUNT=0
> IFS=$'\n'
> 
> PROCIDLIST=`ps -aef | grep httpd | grep -v grep | awk '{print $2}'` 
> 
> for PROCID in $PROCIDLIST 
> 
> do
>          COUNT=$((COUNT+1))
> done
> 
> echo $COUNT
> --- end of script ---
> 
> The IFS variable tells the shell script how to delimit words 
> in a variable.
> It is usually set to the following:
> IFS=$' \t\n'
> 
> in other words, spaces, tabs, and newlines usually delimit 
> words in a variable.  In the above script, I have changed it 
> to just have newlines delimit words.
> 
> Michael
> 
> --
> redhat-list mailing list
> unsubscribe mailto:redhat-list-request@xxxxxxxxxx?subject=unsubscribe
> https://www.redhat.com/mailman/listinfo/redhat-list

I apologize for the resend.  To be technically correct and anal, the script
should read like the following, without the awk command. As mentioned above,
I've redefined IFS to delimit words in variables with newline only.

#!/bin/bash
COUNT=0
IFS=$'\n'
 
LIST=`ps -aef | grep httpd | grep -v grep` 

for LINE in $LIST 

do
         COUNT=$((COUNT+1))
done

echo $COUNT

-- 
redhat-list mailing list
unsubscribe mailto:redhat-list-request@xxxxxxxxxx?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/redhat-list

[Index of Archives]     [CentOS]     [Kernel Development]     [PAM]     [Fedora Users]     [Red Hat Development]     [Big List of Linux Books]     [Linux Admin]     [Gimp]     [Asterisk PBX]     [Yosemite News]     [Red Hat Crash Utility]


  Powered by Linux