====== #!/bin/sh ======
* [[bash]]
* [[csh]]
* [[ksh]]
* [[tcsh]]
* [[zsh]]
* [[http://www.bo.infn.it/alice/alice-doc/mll-doc/impgde/node5.html|Bourne shell programming]]
* [[http://www.mcsr.olemiss.edu/unixhelp/shell/oview1.1.html|Summary of shell facilities]]
* [[http://mywiki.wooledge.org/SignalTrap|Capturing signal traps]]
''sh'' uses different syntax for operators than ''bash''.
Use ''-o'' for or in place of ''||'' and ''-a'' for and in place of ''&&''.
== Shell Symbols ==
* **$1..$9** - arguments
* **$0** - process name
* **$#** - number of arguments
* **$?** - exit status
* **$$** - PID of this shell
* **$!** - PID of the last background command
* **$-** - option supplied at shell call (?)
* **$*** - all arguments
* **$@** - all arguments with quotes
== Conditional Statements ==
* **-a** and (has higher precedence than -o)
* **-o** or
== String Operators ==
* **=** or **==** equal to
* **-n** string is not null
* **-z** string is null, that is, has zero length
== Numeric Operators ==
* **-eq** number equals
* **-ne** number does not equal
* **-gt** greater than
* **-ge** greater than or equal to
* **-lt** less than
* **-le** less than or equal to
== File Operators ==
* **-e** file exists
* **-f** file is not a directory or device file
* **-d** file exists and is a directory
* **-h** file exists and is a symlink
* **-s** file exists and has a size greater than zero
* **-w** file exists and is writeable
* **-x** file exists and is executable
* **-r** file exists and is readable
* **-b** file is a block device
* **-c** file is a character device
* **-p** file is a pipe
* **-S** file is a socket
* **-O** you are owner of file
* **-G** you are group owner of file
== Built-in commands ==
* **:** - null command
* **. file** - execute command in current shell
* **read** - assign //var// from //stdin//
* **readonly** - mark //var// as read only
* **trap** - trap signals
* **type** - inidicate how the shell interprets the command
* **exec** - execute command in place of current shell without creating a new process
* **hash** - rehash command table
== Redirect stderr ==
echo test 2> /dev/null
== Redirect stderr to stdout ==
echo test 2>&1
=== String Comparison ===
When checking for string length, include the string in quotes.
Both of these will return true:
[ -n string ]
[ -n ]
This will return false:
[ -n "" ]