※このエントリーは、developerWorks : AIX and UNIXの「Korn shell scripting」を翻訳したエントリーのPart 1です。

Kornシェルによるスクリプトの作成はすべてのUNIXユーザーにとって学ばざるをえないものの一つです。シェルスクリプト作成が出来るようになれば、数多くのタスクを自動化でき、多くの時間を節約することが出来ます。最初は取っ付き難いかもしれませんが、正しい指導があれば、あなたも高いスキルを持つことが可能です。この記事では、Kornシェルスクリプトの作成方法をお教えしたいと思います。

シェルとは何か?

IBM AIXを初めとするUNIX系のOSはカーネルと通信する手段が必要です。この機能を担っているのがシェルです。あなたが使えるシェルにはいくつかの種類がありますが、この記事ではKornシェルに限った話をします。KornシェルはAIXのデフォルトシェルです。

AIXにあなたがログインすると、特定のディレクトリにてプロンプトが表示されます。デフォルトのディレクトリーは通常はあなたのホームディレクトリーです。ホームディレクトリーと呼ばれる理由ですが、ディレクトリー構造がたいていはこうなっているからです。

$/home/jthomas:

あなたがログインすると、コマンドプロンプトが表示されます。ここはあなたがUNIXコマンドを入力する場所です。UNIXカーネルとやり取りするためにシェルコマンドを入力します。このコマンドは、日付を確認するだけの簡単な一行から複数行に渡るものまで入力が可能です。Listing 1はコマンド例です。

Listing 1: コマンドの例

$date
2008年 5月 1日 土曜日 22時 59分 28秒 EDT
$uptime
10:59PM   up 259 days,   9:44,  5 users,  load average: 3.81, 14.27, 13.71
$hostname
gonzo

シェルコマンドの優れた点は、いくつかを組み合わせてスクリプトと呼ばれるファイルに記述することで、複数コマンドを連続して実行させることが出来る点です。これは複数コマンドを何回も実行しないといけない場合に効果を発揮します。コマンドをその度ごとにタイプする代わりに、Kornシェルスクリプトに記述することが出来ます。

初めてのKornシェルスクリプト

Kornシェルスクリプトの最初の行はシェル自身を記述します。以下のように記述します。

#!/bin/ksh

AIXでKornシェルスクリプトを作成する場合は、テキストエディターを使用する必要があります。最も広く利用され、最も覚えやすいものがviです。最初は取っ付き難いかもしれませんが、viは使えば使うほど使い易くなっていきます。viの使い方だけで本を書いた人もいます。

初めてのKornシェルスクリプトを書き始める前に、viエディターを開き、最初の行にシェル名を記述します。次に、スクリプトのヘッダー情報を書き加え、ユーザーにこのスクリプトの作者が誰で、何をしてくれるスクリプトで、いつ書かれたかを分かるようにしましょう。スクリプトの名前は好きなように出来ますが、Kornシェルのスクリプトであることが分かるように、通常は拡張子に.kshを使います。こうしなくてはいけないということではありませんが、これは広く受け入れられている慣習です。ポンド記号(#)はスクリプトの中のコメントに使われます。Listing 2をご覧下さい。

Listing 2: スクリプトヘッダーの例

$vi my_first_script.ksh
#!/bin/ksh
###################################################
# 作者: Jason Thomas
# 目的: ユーザーに初めてのスクリプトの作成方法を見せるためのスクリプト
# 2008年5月1日
###################################################

スクリプトのヘッダーは極めて基本的な内容ですが、スクリプトを作成する際の重要なコツです。

変数

スクリプト内で変数を設定する方法は極めて単純です。私はスクリプト内の変数は、Listing 3のように全部大文字で記述します。ただし、これは必ずしも真似する必要はありません。

Listing 3: 変数の例

#変数定義
HOME="/home/jthomas" #ホームディレクトリー
DATE=$(date) # DATEにシェルコマンドのdateの出力結果と同じものを代入する
HOSTNAME=$(hostname) # HOSTNAMEにhostnameコマンドの出力結果と同じものを代入する
PASSWORD_FILE="/etc/passwd" # AIXパスワードファイルパスを設定

【訳注】 「Kornシェルスクリプト入門 Part 2」に続きます。