See www.zabbix.com for the official Zabbix site.

Shell coding guidelines

From Zabbix.org
Jump to: navigation, search

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

General

  • 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. 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=()