Inline if shell script

111,654

Solution 1

It doesn't work because you missed out fi to end your if statement.

counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true"; fi

You can shorten it further using:

if [ $(ps -ef | grep -c "myApplication") -eq 1 ]; then echo "true"; fi

Also, do take note the issue of ps -ef | grep ... matching itself as mentioned in @DigitalRoss' answer.

update

In fact, you can do one better by using pgrep:

if [ $(pgrep -c "myApplication") -eq 1 ]; then echo "true"; fi

Solution 2

Other responses have addressed your syntax error, but I would strongly suggest you change the line to:

test $(ps -ef | grep -c myApplication) -eq 1 && echo true

If you are not trying to limit the number of occurrences to exactly 1 (eg, if you are merely trying to check for the output line myApplication and you expect it never to appear more than once) then just do:

ps -ef | grep myApplication > /dev/null && echo true

(If you need the variable counter set for later processing, neither of these solutions will be appropriate.)

Using short circuited && and || operators is often much clearer than embedding if/then constructs, especially in one-liners.

Solution 3

Yes, with syntax issues fixed

That almost worked. The correct syntax is:

counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true"; fi

But note that in an expression of this sort involving ps and grep, the grep will usually match itself because the characters "grep -c Myapplication" show up in the ps listing. There are several ways around that, one of them is to grep for something like [M]yapplication.

Solution 4

I am using Mac OS and following worked very well

$ counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true";fi;

true

Space is needed after [ and before ]

Share:
111,654
London
Author by

London

Jeanie Taylor

Updated on March 15, 2020

Comments

  • London
    London about 4 years

    Is it possible to execute shell script in command line like this :

    counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ] then; echo "true";
    >
    

    Above example is not working I get only > character not the result I'm trying to get, that is "true"

    When I execute ps -ef | grep -c "myApplication I get 1 output. Is it possible to create result from single line in a script ? thank you