/varbash

Script to check Bash scripts for empty or undefined Bash variables

Primary LanguageShellMIT LicenseMIT

README (VarBash)

    Definition

        Script to check Bash scripts for empty or undefined Bash variables to
        avoid some possible mess.

    Details

        Empty or undefined variables inside scripts are unnecessary and can
        lead to some (maybe fatal) problems. Even though, a developer of shell
        scripts should survey the code before using them, typos in variables
        may be missed.

        This is a simple example:

            #!/usr/bin/env bash

            remove_dir="$1"
            rm -fR ${remvoe_dir}/*

        In this case, there is a typo inside the variable name in the line
        that contains the 'rm' command. Due to this, that variable is empty
        and the actual command looks like this:

            rm -fR /*

        When executed, the 'rm' command will remove all directories and files
        from the root directory of the system, leading to severe as well as
        irreversible consequences, no matter which argument gets passed to
        the script. 

        To avoid such a situation, the 'varbash.sh' script tries to detect the
        lines where variables are used that never got assigned before as shown
        in the example above. In this case:

            Line 4:  Possibly undefined variable:  $remvoe_dir/*
            Line 4:  Variable '$remvoe_dir/*' in same line with 'rm' command

        However, it is not absolutely reliable and returns still some false
        positives.

        Feel free to modify!

    Usage

        Just run the script and pass the path to the Bash script you want to
        check as the first command-line argument, for example:

            $ ./varbash.sh /tmp/foobar.sh

        If you want to check multiple files (e.g. if they have a releation),
        you can simply merge them. For example, to check all script files
        inside the directory '/opt/scripts' and its sub-directories with the
        file extension '.sh', you can do that as follows:

            $ cat $(find /opt/scripts | grep "\.sh$") >> /tmp/scripts.tmp
            $ ./varbash.sh /tmp/scripts.tmp

    Exit codes

        If you want to redirect or suppress the standard output, you can
        evaluate the exit codes as follows. Notice that these have been
        revised.

        Version 1.0.3 and above:

            0 - No error and no variable issues have been found
            1 - Wrong number of command-line arguments
            2 - The given path is no file
            3 - The given file does not exist
            4 - All types of variable issues have been found
            5 - Variables without initially assigned value found, only
            6 - Undefined variables found, only

        Below version 1.0.3:

            0 - No error and no variable issues have been found
            1 - The given path is either no file or does not exist
            2 - No error but variable issues have been found

    Contact

        Any suggestions, questions, bugs to report or feedback to give? If so,
        you can find the contact information inside the 'CONTACT' file.