Software developer interested into security and sustainability.

  • 0 Posts
  • 2 Comments
Joined 2 years ago
cake
Cake day: July 3rd, 2023

help-circle

  • It all makes sense when you think about the way it will be parsed. I prefer to use newlines instead of semicolons to show the blocks more clearly.

    for file in *.txt
    do
        cat "$file"
    done
    

    The do and done serve as the loop block delimiters. Such as { and } in many other languages. The shell parser couldn’t know where stuff starts/ends.

    Edit: I agree that the then/fi, do/done case/esac are very inconsistent.

    Also to fail early and raise errors on uninitialized variables, I recommend to add this to the beginning of your bash scripts:

    set -euo pipefail
    

    Or only this for regular sh scripts:

    set -eu
    

    -e: Exit on error

    -u: Error on access to undefined variable

    -o pipefail: Abort pipeline early if any part of it fails.

    There is also -x that can be very useful for debugging as it shows a trace of every command and result as it is executed.