Skip to main content

Shell control flow syntax examples.

# Combining UNIX Commands using && and ||

# Almost all programming languages provide an if statement for controlling
# the flow of a program based upon the result of a test. This simple example
# illustrates one acceptable format of the UNIX shell's if statement:

if [ -f unixfile ]
then
  rm unixfile
fi

# This snippet of code will remove (delete) the file named unixfile if it
# exists and is a regular file. The -f enclosed within brackets performs this
# test. These two UNIX commands, the -f test and the remove statement, can be
# combined and compacted into a single line of code by using the && shell
# construct:

[ -f unixfile ] && rm unixfile

# This statement is read, if command1 is true (has an exit status of zero)
# then perform command2.

# The || construct will do the opposite:

command1 || command 2

# If the exit status of command1 is false (non-zero), command2 will be executed.

# UNIX pipelines may be used on either side of && or ||, and both constructs
# can be used on the same line to simulate the logic of an if-else statement.
# Consider the following lines of code:

if [ -f unixfile ]
then
  rm unixfile
else
  print "unixfile was not found, or is not a regular file"
fi

# Using && and || together, this block of code can be reduced to:

[ -f unixfile ] && rm unixfile || print "unixfile not found, or isn't regular file"

# Finally, multiple commands can be executed based on the result of command1 by
# incorporating braces and semi-colons:

command1 && { command2 ; command3 ; command4 ; }

# If the exit status of command1 is true (zero), commands 2, 3, and 4 will
# be performed.

# These two UNIX shell constructs are very powerful tools for any shell
# script programmer's arsenal.