Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I see these two usage on Ubuntu "command && command" and "command ; command",
e.g. apt-get update && apt-get upgrade

What would differ if I use apt-get update; apt-get upgrade?
I am not asking for this specific usage but in general what is the difference between these two usage?

share|improve this question
Win command-line and batch have the same feature: & (simple sequencing), && (conditional AND) and || (conditional OR). – Karan Jul 12 '13 at 16:13
See also: Bash Reference Manual – List of commands. In general, there's nothing you can't find in the documentation; it's really worth looking at if you have a question about specific syntax elements. – slhck Jul 12 '13 at 17:51
@Karan And for completeness, bash (linux/Ubuntu) has || as well. – Izkata Jul 12 '13 at 19:09
up vote 79 down vote accepted

&& is a logical operator. ; is simple sequencing.

In cmd1 && cmd2, cmd2 will only be run if cmd1 exits with a successful return code.

Whereas in cmd1; cmd2, cmd2 will run regardless of the exit status of cmd1 (assuming you haven't set your shell to exit on all failure in your script or something).

On a related note, with cmd1 || cmd2, using the || 'OR' logical operator, cmd2 will only be run if cmd1 fails (returns a non-zero exit code).

These logical operators are sometimes used in scripts in place of a basic if statement. For example,

if [[ -f "$foo" ]]; then mv "$foo" "${foo%.txt}.mkd"; fi

...can be more concisely achieved with:

[[ -f "$foo" ]] && mv "$foo" "${foo%.txt}.mkd"
share|improve this answer


command1 && command2

command2 is executed if, and only if, command1 returns an exit status of zero (true). In other words, run command1 and if it is successfull, then run command2.

command1 ; command2

Both command1 and command2 will be executed regardless. The semicolon allows you to type many commands on one line.


command1 || command2

command2 is executed if, and only if, command1 returns a non-zero exit status. In other words, run command1 successfully or run command2.


&& operator:

$ rm /tmp/filename && echo "File deleted"

; operator:

$ echo "foo" ; echo "bar"

|| operator:

$ cat /tmp/filename 2>/dev/null || echo "Failed to open file"

External Links

share|improve this answer

You must log in to answer this question.