Differences
This shows you the differences between two versions of the page.
sh [2014/09/26 14:57] |
sh [2014/09/26 14:57] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== #!/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 == | ||
+ | |||
+ | <code> | ||
+ | echo test 2> /dev/null | ||
+ | </code> | ||
+ | |||
+ | == Redirect stderr to stdout == | ||
+ | |||
+ | <code> | ||
+ | echo test 2>&1 | ||
+ | </code> | ||
+ | |||
+ | === String Comparison === | ||
+ | |||
+ | When checking for string length, include the string in quotes. | ||
+ | |||
+ | Both of these will return true: | ||
+ | |||
+ | <code> | ||
+ | [ -n string ] | ||
+ | [ -n ] | ||
+ | </code> | ||
+ | |||
+ | This will return false: | ||
+ | |||
+ | <code> | ||
+ | [ -n "" ] | ||
+ | </code> |