2007-02-24 [長年日記]
_ sh づいている日々
高級なスクリプトでも当然書けるんだけど、例えばあるパターンで行を処理してごにょごにょ、とかって処理は結構 awk と組み合わせて sh スクリプトで書いた方がやりやすかったりする。で、ちょっと最近凝った sh スクリプトを書くようになってハマったのが
- 引数のチェック
- エラーの意味がよく分からん
の辺り。
1 については getopt と case の組み合わせをマスターしないと面倒くさくなりそうなんで、これが今後の課題。*1
2 については xtrace を使ったり verbose にするとよいらしい。つまり起動時に -xv をつける。ただしこれはオリジナル sh のマニュアルがないと気づきにくい。
特に bash のマニュアルはあんまりよくない。bash のマニュアルしか手元にないようなら、set コマンドのところを見る。-o option-name のところに same as -x と書いてあれば、それはコマンドラインオプションの -x と同じだよという意味になっているんだけど、コマンドラインオプションの説明なんか端折りまくりじゃないか。
zsh の場合は man zshoptions の sh/ksh emulation set に書かれている。これはまだ分かりやすい。
というかオリジナルの sh のマニュアルくらい用意しておいてくれよ。
というわけで最近物色していた shell 関係の本は以下の通り。
プロフェショナルシェルプログラミング(砂原 秀樹)- ASCII の プロフェショナル・シェルプログラミング のページも参考まで。昔からものすごく気になっていたもの。今の自分なら csh についての説明は要らないし、基本的な部分の説明も要らないんだけど、安いしコンパクトだし、名前に反して入門向けとしていいと思う。もし後輩が買おうかどうしようか迷ってるんですと言ってきたら間違いなく薦める。昔のこういう ASCII の本は大好きだ。あ、自分の手元には たのしいUNIX―UNIXへの招待(坂本 文)、続・たのしいUNIX―シェルへの招待(坂本 文) があるんで、スクリプトだけじゃなくてシェル上の操作も含めて基本からっていう話ならこれ貸すかな。
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界(ブルース ブリン)- とても詳しいし、イチからきっちり勉強したいんですっていう人にはオススメ。上の -xv オプションも書かれている。というかこれ、前の版から絶賛されているらしいのでここに挙げるのは今さらか。
- 詳解 シェルスクリプト(アーノルド ロビンス/ネルソン・H.F. ベーブ)
- 一冊置いてあると絶対安心できると思う。移植性の辺りは他にあまり扱ってる本がないので重宝するかと。
- Bash Quick Reference(Arnold Robbins)
- コンパクトにまとまっていてかつ素人が素人向けに書いた Web 上の情報よりはるかに使えると思う。日本で書き下ろされた小さい本よりさらに安い(はずだ)し。なんかいま日本の Amazon には在庫ないし思いっきり bash って書いてあるけど。
*1 例えば $2 が存在しているかどうかはいきなり [ $2 ] って書いてもうまく判別できないみたい。しかも標準状態ではエラーメッセージの意味がよく分からない。
古典ですが、こちらもおすすめです。
http://flex.ee.uec.ac.jp/texi/sh/sh.html
あと、何をもってオリジナルのshとするかは謎ですが、こんなのもあります。
http://www.freebsd.org/cgi/man.cgi?query=sh&manpath=4.4BSD+Lite2
なるほどありがとうございます。オリジナルっていうのは bourne shell くらいの意味でして、手元では一応 FreeBSD のマニュアルで確認できたのですが、OSX でも Linxu でも bash しか出てこないので何が何やら分からなくて困った、ということでした。そりゃ bash しか眼中にないんならそれでもいいかもしれんけどよぉとブーたれていたのです。