Tell me more ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

How can I do something like this in bash?

if "`command` returns any error";
then
    echo "Returned an error"
else
    echo "Proceed..."
fi
share|improve this question

migrated from programmers.stackexchange.com Oct 16 '11 at 22:29

3 Answers

For small things that you want to happen if a shell command works, you can use the && construct:

rm -rf somedir && trace_output "Removed the directory"

Similarly for small things that you want to happen when a shell comand fails, you can use ||:

rm -rf somedir || exit_on_error "Failed to remove the directory"

It's probably unwise to do very much with these constructs, but they can on occasion make the flow of control a lot clearer.

share|improve this answer

That's exactly what bash's if statement does:

if command ; then
    echo "Command succeeded"
else
    echo "Command failed"
fi
share|improve this answer
Note that the semicolon is important. – Thorbjørn Ravn Andersen Oct 17 '11 at 7:37
2  
Or you can just put then on a separate line. – l0b0 Oct 17 '11 at 9:00
For the negative that the Op wants: if [ ! command ] ; then ... – Joe Oct 22 '11 at 14:05
1  
@Joe: I think you mean if ! command ; then ... ; fi. [ is itself a command, and it's not needed in this case. – Keith Thompson Jan 13 '12 at 10:19
1  
@Joe: My way also has the virtue of being correct. if [ ! command ] doesn't execute command; it treats command as a string and treats it as true because it has a non-zero length. [ is a synonym for the test command – Keith Thompson Jan 14 '12 at 9:36
show 2 more comments

Check the value of $?, which contains the result of executing the most recent command/function:

#!/bin/bash

echo "this will work"
RESULT=$?
if [ $RESULT -eq 0 ]; then
  echo success
else
  echo failed
fi

if [ $RESULT == 0 ]; then
  echo success 2
else
  echo failed 2
fi
share|improve this answer
While technically correct (and thus not warranting a downvote), it's not making use of Bash's if idiom. I prefer Keith Thompson's answer. – janmoesen Oct 17 '11 at 11:30

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.