  | |  | shell script to count httpd processes | shell script to count httpd processes 2005-03-14 - By Michael Velez
Back
> -- --Original Message-- --
> From: redhat-list-bounces@(protected)
> [mailto:redhat-list-bounces@(protected)] 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@(protected)
> > [mailto:redhat-list-bounces@(protected)] 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;
> > > > @(protected) = (`ps -afe | grep httpd | grep -v grep`);
> > > > foreach $entry (@(protected)) {
> > > > $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@(protected)?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@(protected)?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@(protected)?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/redhat-list
|
|
 |