Scripts

    Shebang Line 🔗

    Source: https://codejunction.hashnode.dev/the-advantage-of-using-usrbinenv-bash-over-binbash

    This is the line that goes at the top of the script and tells the shell what to use to execute the script

    #!/usr/bin/env bash
    

    If statements 🔗

    Source: https://linuxize.com/post/bash-if-else-statement/

    WARNING!! I ran into syntax errors with fi if I put then on the same line with if (see error message below)

    … syntax error near unexpected token `fi’

    if TEST-COMMAND1
    then
      STATEMENTS1
    elif TEST-COMMAND2
    then
      STATEMENTS2
    else
      STATEMENTS3
    fi
    
    #!/bin/bash
    
    echo -n "Enter a number: "
    read VAR
    
    if [ $VAR -gt 10 ]
    then
      echo "The variable is greater than 10."
    elif [ $VAR -eq 10 ]
    then
      echo "The variable is equal to 10."
    else
      echo "The variable is less than 10."
    fi
    

    Until 🔗

    #!/bin/bash
    
    counter=0
    
    until [ $counter -gt 5 ]
    do
      echo Counter: $counter
      ((counter++))
    done
    

    Positional arguments 🔗

    Source: https://www.redhat.com/en/blog/arguments-options-bash-scripts

    $0 - the name of the running script and $1 to $9 are positional arguments. The example if for a executable text file called test_script in your current directory.

    #!/usr/bin/env bash
    
    echo Running \"$0\"
    echo With 1st argument in quotes is \"$1\"
    echo And 2nd without quotes this time is: "$2"
    echo And 3rd without quotes this time is: $3
    

    Run with ./test_script.sh first second third and it outputs

    Running "./test_script.sh"
    With 1st argument in quotes is "first"
    And 2nd without quotes this time is: second
    And 3rd without quotes this time is: third
    

    Case statements 🔗

    Source: https://linuxize.com/post/bash-case-statement/

    case EXPRESSION in
    
      PATTERN_1)
        STATEMENTS
        ;;
    
      PATTERN_2)
        STATEMENTS
        ;;
    
      PATTERN_N)
        STATEMENTS
        ;;
    
      *)
        STATEMENTS
        ;;
    esac
    
    #!/bin/bash
    
    echo -n "Enter the name of a country: "
    read COUNTRY
    
    echo -n "The official language of $COUNTRY is "
    
    case $COUNTRY in
    
      Lithuania)
        echo -n "Lithuanian"
        ;;
    
      Romania | Moldova)
        echo -n "Romanian"
        ;;
    
      Italy | "San Marino" | Switzerland | "Vatican City")
        echo -n "Italian"
        ;;
    
      *)
        echo -n "unknown"
        ;;
    esac
    

    Comparing Strings 🔗

    Source: https://linuxize.com/post/how-to-compare-strings-in-bash/

    See link for more info. One note I wanted to add is to ensure you use quotes around your strings especially if they are coming from variables.

    Directory exits test (and negation) 🔗

    The example below does nothing in the positive case and exits on the negative case

    if [ -d "$SRC_DIR" ] 
    then
        : # Do nothing (was getting trouble with negating the condition)
    else
      echo "Error: Source directory does not exist"
      exit 1
    fi
    

    No-Op 🔗

    Source: https://stackoverflow.com/questions/12404661/what-is-the-use-case-of-noop-in-bash

    Simply use a :

    while keep_waiting; do
      : # do nothing
    done
    

    Set script to exit on errors 🔗

    Source: https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html

    set -e
    

    Set script to echo commands 🔗

    Source: https://stackoverflow.com/questions/2853803/how-to-echo-shell-commands-as-they-are-executed

    set -x