Zabbix Code Guidelines

3.04.04.45.0 (current)| In development:5.2 (devel)| Unsupported:1.82.02.22.43.23.44.2Guidelines

User Tools

Site Tools


Sidebar

coding:shell

Shell coding guidelines

Overview

Shell scripts (like initscripts) and shell commands inside other files should follow these conventions.

General rules

  • Shebang should always be added.
  • Variables should be doublequoted always (except when that would change the intent).
  • Suggested practices for target shell should be used - if writing for bash, $() instead of backticks, etc.
  • If writing for sh, minimum subset of other utility functionality should be used (for example, sed -i should not be used as it might not be supported on some Unices).
  • In variable comparisons, consider using xyes syntax. See Stackoverflow question on that.
  • If you have to write to a file that other process might read and that might result in a race condition (where writing to the file has not been completed yet), use mv, as it must be atomic according to POSIX.
  • If you have to create locking in a shell script, use directories, not files. mkdir is atomic, thus mkdir lockdir should never allow two processes to lock at the same time.
  • Don't use cat where it is not needed. Use grep string file instead of cat file | grep string. Also see Useless use of cat.
  • Read BashFAQ.

Formatting

  • Pipe character should have single space on each side if used for command chaining:

ifconfig eth0 | grep "inet addr"

  • Stream redirection characters should have single space on each side, too:

create/schema/gen.pl c > src/libs/zbxdbhigh/dbschema.c

  • When defining an array, add spaces inside the parenthesis:

array=( a b )

  • Except when defining an empty array:

array=()