シェルスクリプトに触る前に、一覧の作業について触れておきたいと思います。
UNIX系のOSでファイルを編集するには $ emacs や $ vi といったコマンドを使います。 しかしサーバーの運用では導入されているエディタは限られているため、比較的使い易いemacsが導入されている環境はかなりラッキーといえるでしょう。viは使いづらいという評判があり、習得しようという気持ちにならないかもしれません。
そんな状況では、 手元にあるWindows上のエディタソフトを使いたいという気持ちになるのも自然といえるでしょう。 しかしサーバー上のシェルスクリプトを手元のエディタで編集した事が原因で問題を起してしまうことがあります。
TeraTermやPoderosaなどの端末ソフトでシェルスクリプトを $ cat コマンドなどで表示させ、エディタにコピーして編集をするかもしれません。 編集が終った後で、反対の作業をしてサーバー上のファイルを上書きしますが、この作業は下記のような問題点を含んでいます。
ここ数年間でUTF-8が普及していますが、以前からUNIX系サーバーを運用している環境では日本語の取り扱いに違いがあります。 大学などで使われてきたLinux、FreeBSD等の無料で入手できるOSではEUCが標準的に使われてきました。 企業で主に使われる商用OSではEUCに加えてShift_JISのサポートを独自に追加しており、Windows端末との相互運用性を高めるためにShift_JISを採用している組織も多くあります。
サーバー上のシェルスクリプトで日本語を扱わないという選択肢は後ろ向きですが、 日本語を扱うためには環境を管理する必要があり、慣れるまではとりあえずお勧めの選択肢です。
それができない場合には、スクリプトに日本語を書いても影響がないようにサーバーがサポートする言語環境を理解する必要があります。 とりあえずの理解は $ locale -a の出力の中の一つを "LANG" 環境変数に指定すると覚えておけば良いかと思います。
$ locale -a | grep -i ja ja_JP.utf8 $ export LANG=ja_JP.utf8
またTeraTermやPoderosaといった端末ソフトウェアにもサーバーから受け取った文字コードをUTF-8、EUC、Shift-JISのいずれと判断するか設定する項目があります。
サーバー上でファイルを $ cat で開いても問題はないのに、 $ more や $ vi コマンドで開くと各行の終りに ^M が表示される場合があります。 最近のLinuxを使っていれば気がつかないと思いますが、AIXやNetBSDなどでこの現象に遭遇します。
Windows上では行末記号が2文字分使うのに対して、UNIX系OSでは1文字分であるために、余った1文字が ^M として画面に表示されます。 UNIXサーバー上で修正する必要はいくつかありますが、 $ tr コマンドを使う方法を覚えておけば大抵の環境で通用すると思います。
$ tr -d '\015' < script.sh > new.script.sh
これまで挙げてきたような問題は、実は、事前にテストしていれば防げていました。 そもそも何が障害に発展するか理解していないので「何をテストしたら良いかわからない」というのが現状でしょう。 本番環境と同じ構成のテスト環境を持つ事を真剣に検討してください。
負荷に耐える必要はないですが、2つのサーバーを1つにまとめるといった事はせずに、VMWareやVirtualBoxなどの仮想化環境の利用して構築する事をお勧めします。
その他はシェルスクリプトの中では変数を echo コマンドで表示させたり、 exit を使って実際に cp や rm を実行する前に処理を止めるといった事ができます。
Created: 2009-12-12, Last modified: 2010-03-19
www.yasundial.org by Yasuhiro ABE is licensed under a Creative Commons Attribution 2.1 Japan License. Permissions beyond the scope of this license may be available at http://www.yasundial.org/info/license.html.