#navi_header|技術| bashでのシェルスクリプトの情報源: - "Manpage of BASH" -- http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html - "シェル・スクリプト・リファレンス INDEX:ITpro" -- http://itpro.nikkeibp.co.jp/article/COLUMN/20060224/230580/ 他、/etc/rc.d/ 以下の各種サービス起動スクリプトが参考になります。 以下は実際にシェルスクリプトを書いていた時のTipsです。 ---- #outline|| ---- * "&&" と "||" と "exec" の使い分け ・"&&"の例 : /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 コマンドも頻出しますが、この点を読み違え無いよう注意が必要です。 * ワイルドカード(&void()*)の注意点 便利なワイルドカード、&void()*ですが、使用上の注意点もあります。 たとえば、rhostsファイルのあるディレクトリで $ find /etc -name r* として、「rで始まるファイルを/etcから探そう」としても、r* が rhosts に展開されてしまい、 $ find /etc -name rhosts が実行されてしまいます。 これを避けるには、メタ文字展開の抑制を使います。 $ find /etc -name "r*" - シングルクォテーション「'」で囲むと、「!」以外のメタ文字を展開しません。 - ダブルクォテーション「"」で囲むと、「!, $, `」以外のメタ文字を展開しません。 - \(バックスラッシュ)だと、この直後の一文字を展開しません。 メタ文字とは関係が薄いですが、コマンド履歴を呼び出す "!!", "!N" をバッククォートで囲むと、中のコマンドが実行された結果に展開されます。 #navi_footer|技術|