Bash: If/Else statement in one line

前端 未结 5 1245
遥遥无期
遥遥无期 2021-01-29 19:26

I am trying to check if a process (assume it is called some_process) is running on a server. If it is, then echo 1, otherwise echo 0.

This is the command th

相关标签:
5条回答
  • 2021-01-29 20:06

    You can make full use of the && and || operators like this:

    ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0
    

    For excluding grep itself, you could also do something like:

    ps aux | grep some_proces | grep -vw grep > /tmp/test.txt && echo 1 || echo 0
    
    0 讨论(0)
  • 2021-01-29 20:09

    There is no need to explicitly check $?. Just do:

    ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0 
    

    Note that this relies on echo not failing, which is certainly not guaranteed. A more reliable way to write this is:

    if ps aux | grep some_proces[s] > /tmp/test.txt; then echo 1; else echo 0; fi
    
    0 讨论(0)
  • 2021-01-29 20:09

    Use grep -vc to ignore grep in the ps output and count the lines simultaneously.

    if [[ $(ps aux | grep process | grep -vc grep)  > 0 ]] ; then echo 1; else echo 0 ; fi
    
    0 讨论(0)
  • 2021-01-29 20:13
    pgrep -q some_process && echo 1 || echo 0
    

    more oneliners here

    0 讨论(0)
  • 2021-01-29 20:23

    && means "and if successful"; by placing your if statement on the right-hand side of it, you ensure that it will only run if grep returns 0. To fix it, use ; instead:

    ps aux | grep some_proces[s] > /tmp/test.txt ; if [ $? -eq 0 ]; then echo 1; else echo 0; fi

    (or just use a line-break).

    0 讨论(0)
提交回复
热议问题