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

11. 参照テーブル

11.1 文字列比較演算子

        (1) s1  =  s2    s1 と s2 が同一
        (2) s1 !=  s2    s1 と s2 が同一でない
        (3) s1  <  s2    作成中 
        (4) s1  >  s2    作成中
        (5) -n s1        s1 が null でない(一文字以上を含んでいる)
        (6) -z s1        s1 が null である

11.2 文字列比較の実例

ふたつの文字列を比較する

        #!/bin/bash
        S1='string'
        S2='String'
        if [ $S1=$S2 ];
        then
                echo "S1('$S1') is not equal to S2('$S2')"
        fi
        if [ $S1=$S1 ];
        then
                echo "S1('$S1') is equal to S1('$S1')"
        fi
        

ここで、上記の if [ $1 = $2 ] に関して Andrea Beck が送ってくれた メールの一文を引用します。

      あまりいい考えとは言えません。もし、$S1 か $S2 のどちらかが空の場合、
      パーサエラーになるからです。x$1=x$2 か "$1"="$2" としたほうがよいで
      しょう。

11.3 数値演算子

        +
        -
        *
        /
        % (剰余)
        

11.4 数値関係演算子

        -gt  ( >  )
        -le  ( <= )
        -ge  ( >= )
        -eq  ( == )
        -ne  ( != )
        

C プログラマが使っている演算子についても、丸カッコを付けて対応関係を示しまし た。

11.5 便利なコマンド

このセクションは Kees (謝辞を見てください)によってリライトされたものです。

以下のコマンドのなかには、完全なプログラミング言語を内包しているといえそう なものもあります。それらのコマンドを取り上げて、基本的用法だけを説明しよと 思います。詳細な解説については、コマンドのマニュアルページをみてください。

sed (stream editor)

sed はノン・インタラクティブなエディタです。カーソルを画面上で動かし ながらファイルに変更を加えるかわりに、編集に関する指示と編集すべきファイル名 を書き込んだスクリプトを使用します。また、sed は一種のフィルタである と考えることもできます。いくつか例を見てみましょう。

        $ sed 's/to_be_replaced/replaced/g' /tmp/dummy
        

上記において、sed は、/tmp/dummy というファイルを読み込ん で、文字列 "to_be_replaced" を文字列 "replaced" に置換しま す。その結果は標準出力(通常はコンソール)に出力されますが、上記コマンドライン の末尾に(例えば) '> capture' と付け加えるなら、 "capture" という名前のファイルに sed の出力結果を送ることもできます。

        $ sed 12, 18d /tmp/dummy
        

上記の例で、sed12 から 18 行目までを除く全ての 行を表示します。このコマンドによって元のファイルに変更が加えられることはあり ません。

awk (データファイルやテキストの検索と整形処理)

AWK プログラミング言語には多くの実装が存在します。(最も有名なイン タープリタは、GNU の gawk と「新しい awk」 である mawk です。)   AWK の原理は単純です。パターンを探して、合致したパターン(pattern)全 てに対してなんらかの処理(action)を行うということです。

再度、以下のような行を含むダミーファイルを作りました。

        test123
        test
        tteesstt 
        
        $ awk '/test/ {print}' /tmp/dummy
        test123
        test
        

上記において、AWK が探そうとしたパターン(pattern)は "test" であり、/tmp/dummy ファイルの行の中から "test" という文字列 を探し出したときに行った処理(action)が画面への表示 "print" です。

        $ awk '/test/ {i=i+1} END {print i}' /tmp/dummy
        3
        

数多くのパターンを探そうとしているときは、クオテーション('')で囲まれた文字列 を(例えば) '-f file.awk' といったファイル名で置き換えます。 そうすれば、すべてのパターンと処理を 'file.awk' というファイルに書き 込んで、まとめて実行できます。

grep (検索パターンに合致する行の出力)

grep コマンドの、あるパターンに合致する行を表示する機能については、 これまでの章でいくつも見てきたと思います。しかし、grep の機能はそれ だけではありません。

        $ grep "look for this" /var/log/messages -c
        12
        

上記の例は、"look for this" という文字列が /var/log/messages ファイルのなかで 12 回見つかったことを意味し ています。

[ OK, この例題はフェイクなんだ。/var/log/messages にちょっと手を加え といたのさ。 :-)]

wc (行、語、バイト数を数えます)

以下の例題では、出力が期待通りになっていないのが分かると思います。この例題で 使われたダミーファイルには(前に使った内容とは異なる)次のような文字列が含まれ ていたからでらす。

        bash introduction 
        howto test file 
        

        $ wc --words --lines --bytes /tmp/dummy
        2 5 34 /tmp/dummy
        

wc ではパラメータ指定の順番は自由ですが、それらの出力時の順番はいつも 決まっています。上記のように、行数、語数、バイト数、ファイル名 の順番に なります。

sort (テキストファイル内の行の並べ替え)

今回のダミーファイルの内容は次のようになっています。

        b
        c
        a 
        
        $ sort /tmp/dummy
        

次は、そのアウトプットがどう表示されるかです。

        a
        b
        c
        

コマンドを使うとすると、これほど簡単にはいかないでしょう。

bc (数値計算用のプログラミング言語)

bc はコマンドラインで操作するよくできた計算プログラムです。リダイレク トやパイプからは入力できませんが、ファイルからの入力が可能で、ユーザインター フェイスもあります。以下では、そのコマンドの中からいくつかを実際にデモンスト レーションしてみます。なお、bc 起動時に -q パラメータを使用 しているのは、起動時にウェルカムメッセージを出力させないためです。

        $ bc -q
        1 == 5
        0
        5 != 5
        0
        2 ^ 8
        256
        sqrt(9)
        3
        while (i != 9) { i = i + 1; print i }
        12345689
        quit
        

tput (端末の初期化や terminfo データベースの検索)

tput でなにができるか、簡単に紹介します。

        $ tput cup 10 4
        

上記の例では、プロンプトが (y10,x4) の位置にあらわれます。

        $ tput reset
        

上記では、画面をもとに戻して、(y1,x1) の位置にプロンプトを表示しま す。(y0,x0) がちょうど左上の隅にあたる位置です。

        $ tput cols
        80
        

上記では、X 軸方向に文字がいくつ並ぶのかを表示しています。

(少なくとも)上記のようなプログラムについては、使い慣れておくことを強くお薦め します。コマンドライン上の操作で驚くほどの処理をしてくれる小さなプログラムは 無数にあります。

[例題のいくつかは、マニュアルページや FAQ から取りました。]


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

[