Bash Examples: Basic Information and Control Structures

Last updated:
Table of Contents

WIP Alert This is a work in progress. Current information is correct but more content may be added in the future.


add this to the start of every script.

#!/usr/bin/env bash

If then else

spaces before and after [[ and before ]] are important!

if [[ condition ]];then
    # do stuff
elif [[ other condition ]]; then
    # something else
    # or do this 

If then else with grep matches

Does $PATH include "some_string"?

if echo $PATH | grep -q "some_string"; then
    echo "matches!"
    echo "no matches"

If not

Spaces are important!

if [[ ! condition ]];then
    # do stuff

AND operator


OR operator


Access command-line arguments

$# is the number of arguments provided to the current script

$0 is the script name

$1, $2, $3 and so on until $9 are the first argument, second argument, third argument and so on.

Function definition

function do_something {
    echo "this gets printed to standard output"

# to call it, just use its name

Function with parameters

It's the same thing as the item above (acessing command-line arguments): $1 is the first parameter, $2 is the second one, etc etc.

function say_something {
    echo "$1"
$ say_something "foobar"
# prints "foobar"
$ say_something
# prints nothing
$ say_something foo bar
# prints "foo" (other arguments weren't accessed)

Number of parameters passed to function

$# returns the number of parmeters passed

    if [[ $# -eq 0 ]]; then
      # no parameters passed
    elif [[ $# -eq 1 ]]; then
      # 1 parameter passed
      # 2 or more parameters passed

Check if command exists

For example, the program deactivate is enabled if you have an active python virtual environment.

If you wish to test whether the current user is in a virtual env, one way is to test whether the command deactivate exists, you can use the type builtin and test its result;

# piping the output of this command to dev null
# to avoid noise
ret=$(type deactivate &> /dev/null)

if [[ $? -eq 0 ]]; then
  echo "we're in a virtual env"
  echo "no virtualenv" 

Dialogue & Discussion