- Assigning reserved words or characters to variable names.
- Using a hyphen or other reserved characters in a variable name (or function name).
- Using the same name for a variable and a function. This can make a script difficult to understand.
- Using whitespace inappropriately. In contrast to other programming languages, Bash can be quite finicky about whitespace.
- Not terminating with a semicolon the final command in a code block within curly brackets.
- Assuming uninitialized variables (variables before a value is assigned to them) are "zeroed out". An uninitialized variable has a value of null, not zero.
- Mixing up = and -eq in a test. Remember, = is for comparing literal variables and -eq for integers.
- Misusing string comparison operators.
- Sometimes variables within "test" brackets ([ ]) need to be quoted (double quotes). Failure to do so may cause unexpected behavior.
- Attempting to use - as a redirection operator (which it is not) will usually result in an unpleasant surprise.
- Using Bash-specific functionality in a Bourne shell script (#!/bin/sh) on a non-Linux machine may cause unexpected behavior. A Linux system usually aliases sh to bash, but this does not necessarily hold true for a generic UNIX machine.
- Putting whitespace in front of the terminating limit string of a here document will cause unexpected behavior in a script.
- Putting more than one echo statement in a function whose output is captured.
- A script may not export variables back to its parent process, the shell, or to the environment.
- A related problem occurs when trying to write the stdout of a tail -f piped to grep.
tail -f /var/log/messages | grep "$ERROR_MSG" >> error.log
# The "error.log" file will not have anything written to it.
- Using "suid" commands within scripts is risky, as it may compromise system security.
- Bash does not handle the double slash (//) string correctly.

No comments:
Post a Comment