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

6. 簡単なプログラミング

6.1 シェルスクリプト: 強化された .BAT ファイル

DOS のバッチファイル(.BAT ファイル)は長いコマンドラインのショートカッ トを作るのによく用いられます(私はそういう風によく使いました)。Linux で 各種コマンドへのショートカットを作るには、適切な alias 行を profile.profile に記載します(上記の例を見てくだ さい)。でも、バッチファイルをより複雑な目的に使っていたならシェルのス クリプト機能を使うのが便利でしょう。シェルのスクリプト機能は QBasic と 同等の機能を持っています。シェルスクリプトは変数や while, for, case, if... then... else といった制御構造など、多くの機能を持っています。シェ ルスクリプトは多くの場合「本物」のプログラム言語の代りに使えます。

シェルスクリプト --- DOS の .BAT ファイルの同等物 --- を書くには、必要 な指示を並べた通常のアスキーファイルを作り、セーブして chmod +x <scriptfile> として実行許可を与えます。実行するにはそのファ イル名を入力します。

一言注意しておきますと、システムに付属のエディタは通常 vi で すが、私の経験から言うと、ほとんどの新しいユーザには vi は使い づらいようです。私自身 vi は好きではないし使ってもいないので、 ここでは使い方の説明はしませんが、必要ならば Matt Welsh の ``Linux installation...'' を参照してください(X が動くなら joeemacs のような別のエディタを使う方がいいと思います)。ここでは vi については以下のコマンドだけを説明しておきます。

bash のスクリプトの書き方についてはそれだけで本が一冊必要にな るので、ここではこれ以上は触れずに、基本的な使い方が分かるサンプルスク リプトを示すだけにしておきます。



#!/bin/sh
# シェルスクリプトのサンプル
# これはコメント行
# 1 行目は変更しないこと。#!/bin/sh は1行目にないといけません
echo "This system is: `uname -a`" # use the output of the command
echo "My name is $0" # built-in variables
echo "You gave me the following $# parameters: "$*
echo "First parameter is: "$1
echo -n "What's your name? " ; read your_name
echo look the difference: "hi $your_name" # quoting with "
echo look the difference: 'hi $your_name' # quoting with '
DIRS=0 ; FILES=0
for file in `ls .` ; do
  if [ -d ${file} ] ; then # if file is a directory
    DIRS=`expr $DIRS + 1`  # DIRS = DIRS + 1
  elif [ -f ${file} ] ; then
    FILES=`expr $FILES + 1`
  fi
  case ${file} in
    *.gif|*jpg) echo "${file}: graphic file" ;;
    *.txt|*.tex) echo "${file}: text file" ;;
    *.c|*.f|*.for) echo "${file}: source file" ;;
    *) echo "${file}: generic file" ;;
  esac
done
echo "there are ${DIRS} directories and ${FILES} files"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then # exit code of last command
  echo "ZxY--!!!WKW not found"
fi
echo "enough... type 'man bash' if you want more info."

6.2 C でのプログラム

Unix では、好き嫌いにかかわらず、システム言語は C です。その他の言 語(FORTRAN, Pascal, Lisp, Basic, Perl, awk...)も利用可能です。

すでに C については御存知のこととして、ここでは Turbo C++ やその親戚を 使ったことがある人向けにいくつかのガイドラインを紹介します。Linux での C コンパイラは gcc で、DOS の C コンパイラに付いてくるような 統合環境やオンライン・ヘルプ、統合デバッガの類いは一切ありません。 gcc は単なるコマンドライン・コンパイラですが、きわめて強力か つ効率的です。標準的な 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>.a という名前のライブラリをリンク します。ですから、-lm を指定すると /usr/lib/libm.a をリンクします)

簡単なプログラムならばこれで十分ですが、コンパイルするプログラムが複数 のソースファイルからできている場合、make というユーティリティ を使うのが一般的です。何らかのパーサを書いているとしましょう。このソー スコードは parser.c というファイルになっており、 parser.hxy.h の 2 つのファイルをインクルードしま す。さて、 calc.c というプログラムの中で parser.c の 中にあるルーチンを使いたくなりました。calc.cparser.h をインクルードします。さて、calc.c をコンパ イルするにはどうすればいいでしょう?

この場合、makefile と呼ばれるファイルを書くのがいいでしょう。 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 には 2 つのソースファイルが必要

parser.o:  parser.c parser.h xy.h
<TAB>gcc -c parser.c
# parser.o には 3 つのソースファイルが必要

# これでお終い

このファイルを makefile という名前で保存して

$ make

とすると、プログラムがコンパイルされます。あるいは calc.mak という名前で保存して、

$ make -f calc.mak

とすることも可能です。詳細については RMP してください。

man ページの 3 章には C の関数についての説明があります。

$ man 3 printf

Linux にはさまざまな種類のライブラリが公開されています。まず最初に紹介 すべきはテキストモードで各種の効果を出すための ncurses ライブ ラリとグラフィック用の svgalib でしょう。X プログラムに挑戦す る勇気があれば、XForms ライブラリ( bloch.phys.uwm.edu:/pub/xforms) と/あるいは MGUI ライブラリ( www.volftp.vol.it:/IT/IT/ITALIANI/MORELLO/index.htm) を入 手してみましょう。この 2 つのライブラリは X でのプログラムをずっと簡単 にしてくれます。ボーランド風の統合環境が無いと困る人は sunsite.unc.edu:/pub/Linux/apps/editors/ から入手できる xwpe がお勧めです。ただし、多少好き嫌いはありそうですが。


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