bashでのシェルスクリプトの情報源:
他、/etc/rc.d/ 以下の各種サービス起動スクリプトが参考になります。
以下は実際にシェルスクリプトを書いていた時のTipsです。
・"&&"の例 : /foo/bar が存在すれば、$HOME/bin/baz を実行。
[ -f /foo/bar ] && $HOME/bin/baz
・"||"の例 : /foo/bar が存在 ''しなければ''、$HOME/bin/baz を実行。
[ -f /hoge/bohe ] || $HOME/bin/uhyou
多くのプログラミング言語もそうですが、or演算の場合、先にtrue評価の式があると、後ろの式は評価されなくなります。bashの "&&", "||" でも同様の動きになります。
・execの注意点 : execシェルコマンドはプロセスを置き換えてしまいます。つまりexecが実行されたらそれ以降のシェルスクリプトは実行されません(=復帰しません)。各種スクリプトで "&&", "||" と共に exec コマンドも頻出しますが、この点を読み違え無いよう注意が必要です。
便利なワイルドカード、*ですが、使用上の注意点もあります。
たとえば、rhostsファイルのあるディレクトリで
$ find /etc -name r*
として、「rで始まるファイルを/etcから探そう」としても、r* が rhosts に展開されてしまい、
$ find /etc -name rhosts
が実行されてしまいます。
これを避けるには、メタ文字展開の抑制を使います。
$ find /etc -name "r*"
メタ文字とは関係が薄いですが、コマンド履歴を呼び出す "!!", "!N" をバッククォートで囲むと、中のコマンドが実行された結果に展開されます。