The following rules do not constitute a formal grammar. They merely describe the common syntactic forms in a simplified manner.
PIPELINE ::= CMDLIST [ | CMDLIST ]...
CMDLIST ::= COMMAND
| CMDLIST [ && PIPELINE ]...
| CMDLIST [ || PIPELINE ]...
| CMDLIST [ ; PIPELINE ]...
| CMDLIST & [ PIPELINE & ]...
| ( CMDLIST )
| { CMDLIST ; }
| FUNCTIONDEF
FUNCTIONDEF ::= function IDENT { CMDLIST; }
| IDENT () { CMDLIST; }
COMMAND ::= if CMDLIST; then CMDLIST;
[ elif CMDLIST; then CMDLIST; ]...
[ else CMDLIST; ] fi
| case WORD in [ PATTERN ) CMDLIST ;; ]... esac
| for IDENT [ in WORD... ] ; do CMDLIST; done
| select IDENT [ in WORD... ] ; do CMDLIST; done
| while CMDLIST; do CMDLIST; done
| until CMDLIST; do CMDLIST; done
| when WHENARGS { CMDLIST; }
| (( EXPRESSION ))
| time PIPELINE
| IDENT=VALUE... COMMAND
| FUNCTIONCALL
| BUILTIN
| UNIXCMD
[ - `[ expr ]' is shorthand for test expr. The [ expr ] command is an alternative syntax for test expr.