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