shell script to count httpd processes

Michael Velez mikev777 at hotmail.com
Mon Mar 14 22:52:30 UTC 2005


 

> -----Original Message-----
> From: redhat-list-bounces at redhat.com 
> [mailto:redhat-list-bounces at redhat.com] 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 at redhat.com?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




More information about the redhat-list mailing list