次のページ 前のページ 目次へ

10. ちょっとだけプログラミング

10.1 シェルスクリプト: バッチファイルの強化版

DOS を利用していたとき長いコマンドラインのショートカットを作るためにバッ チファイルを使用していたなら (私もよくしました)、同じ目的は適切なエイ リアスをprofile.bash_profile に記述することで達成できま す (上の例を参照)。 でも、もっと複雑なバッチファイルを使っていたならシェ ルによるスクリプト言語をきっとあなたは好きになるはずです。これは古き良 き QBasic と同じか、それ以上にパワフルです。これは変数や while、for、 case、if... then... else のような構造を持ち、そのほかにもたくさんの特 徴があります。これは「本物」のプログラミング言語の代わりになります。

スクリプト (DOS 上の .BAT に相当) を書くには、命令を含んだ標準の ASCII ファイルを記述し、セーブします。その後 chmod +x <scriptfile> コマンドで実行可能にすればよいだけです。スクリプトを実行するにはファ イル名をタイプしてください。

注意! vi と呼ばれるシステムエディタがありますが、これは私の経験か ら言って初心者の方には使うのがとても難しいと感じると思います。ここでは 使い方などは説明しませんが、Matt Welsh の本やネットでチュートリアルを 探してそれらを参考にしてください。ここでは以下の説明にとどめておきます。

初心者向けのよいエディタに joe があります。jstar と タイプすることで起動でき、これは DOSWin のエディタと同じキーバインディ ングを持ちます。jed の WordStar や IDE モードはさらによいです。 どこでアプリケーションを見付けるか のセクショ ンで、どこからこれらのエディタをダウンロードできるか見付けてください。

bash 上でのスクリプト記述はとても幅の広いサブジェクトであり、それ だけで本が書けてしまえますので、これ以上は深入りしません。ここでは単純 に基本となるルールを覚えてもらうためにシェルスクリプトの例を挙げること にしま す:


#!/bin/sh
# sample.sh
# これはコメント
# 一行目を編集しないように。それはそこにある必要があります。
echo "このシステムは:" `uname -a` # コマンドの出力を使う
echo "私の名前は $0" # 組込みの変数
echo "あなたは次の" $# "パラメータを与えました: "$*
echo "最初のパラメータは: "$1
echo -n "あなたの名前は? " ; read your_name
echo 違いに気づきますか: "hi $your_name" # " で引用
echo 違いに気づきますか: 'hi $your_name' # ' で引用
DIRS=0 ; FILES=0
for file in `ls .` ; do
  if [ -d ${file} ] ; then # ファイルがディレクトリなら
    DIRS=`expr $DIRS + 1`  # DIRS = DIRS + 1
  elif [ -f ${file} ] ; then
    FILES=`expr $FILES + 1`
  fi
  case ${file} in
    *.gif|*jpg) echo "${file}: 画像ファイル" ;;
    *.txt|*.tex) echo "${file}: テキストファイル" ;;
    *.c|*.f|*.for) echo "${file}: ソースファイル" ;;
    *) echo "${file}: 一般的なファイル" ;;
  esac
done
echo " ${DIRS} 個のディレクトリと ${FILES} 個のファイルが見付かりました"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then # コードの最後のコマンドから exit する
  echo "ZxY--!!!WKW not found"
fi
echo "これで十分かな。。さらなる情報は 'man bash'"

10.2 C 言語をあなたに

好む好まざるとを問わず、UNIX 上でのシステム言語は C です。ほかにもたく さんの言語 (Java、FORTRAN、Pascal、Lisp、Basic、Perl、awk...) が使用可 能です。

あなたが C を知っているものとして、これらは今まで Turbo C++ やそれら DOS 用のコンパイラを使ってきた人へのガイドラインです。Linux の C コンパイラは gcc と呼ばれ、これはベルや笛などの DOS のもので 通常付属されている機能を欠きます。IDE、オンラインヘルプ、統合された デバッガなどもありません。単純なコマンドラインのコンパイラですが とても強力で有能です。標準の hello.c をコンパイルするには:

$ gcc hello.c

これで実行ファイル a.out を作成します。実行ファイルに違う名前を与 えるには

$ gcc -o hola hello.c

ライブラリをプログラムにリンクするには、-l<libname> のようなスイッ チを追加します。例えば数学ライブラリをリンクするには

$ gcc -o mathprog mathprog.c -lm

(-l<libname> スイッチは gcc にライブラリ /usr/lib/lib<libname>.so をリンクさせます。つまり -lm/usr/lib/libm.so をリンクします)

ここまではいい感じですね。でもプログラムが複数のソースファイルに よってできている場合は、make というユーティリティを使う必要があり ます。仮にあなたが式の構文解析をするプログラムを書いたとします。 これのソースファイルには parser.c と #include される二つの ヘッダファイル、parser.hxy.h があります。 parser.c にあるルーチンを parser.h を #include する calc.c で使い たいとします。なんてめちゃくちゃな! どうやったら calc.c をコンパ イルできるのでしょう?

そこで、コンパイラにソースとオブジェクトファイル間の依存状況を 教える Makefile と呼ばれるものを書かなければなりません。


# これは calc.c をコンパイルするための Makefile
# 示されたところで <TAB> キーを押すように

calc: calc.o parser.o
<TAB>gcc -o calc calc.o parser.o -lm
# calc は二つのオブジェクトファイルに依存します: calc.o と parser.o

calc.o: calc.c parser.h
<TAB>gcc -c calc.c
# calc.o は二つのソースファイルに依存します

parser.o:  parser.c parser.h xy.h
<TAB>gcc -c parser.c
# parser.o は三つのソースファイルに依存します

# Makefile 終了

このファイルを Makefile という名前で保存し、プログラムをコンパイ ルするために make とタイプしましょう。そのほかの手段として、 calc.mak という名前で保存し、make -f calc.mak とタイプするこ ともできます。そしてこれはもちろん RMP してみてください。 man に載って いる C 関数についての情報を使用することもできます。例えばセクション 3 だったら以下のようにします。

$ man 3 printf

プログラムをデバッグするには gdb を使いましょう。使い方は info gdb で学びましょう。

Linux ではたくさんのライブラリが使用可能です。この中でも ncurses (テキスト効果)、そして svgalib (コンソールグラフィックス) を最初 に使ってみたくなるでしょう。もしあなたに勇気があれば X11 プログラミン グに挑戦してみるのも悪くないかもしれません (そんなには難しくありません)。 X11 プログラム記述を簡単にする複数のライブラリがあります。 http://www.xnet.com/~blatura/linapp6.html を見てみてください。で も Gtk が Linux 標準になって来ていることを忘れずに。

たくさんのエディタは IDE となることもできます。例えば emacsjed には文章構成ハイライト、自動インデント、といったたくさんの 機能があります。ほかの方法として、 ftp://sunsite.unc.edu:/pub/Linux/devel/debuggers/. から rhide パッケージを入手してみるのもいいかもしれません。 これは Borland IDE のクローンで、あなたも気に入ると思います。


次のページ 前のページ 目次へ