Cシェル入門 - コマンド形式の基礎 (1)

概説

Cシェルは コマンドインタプリタです。 あなたが 入力した コマンドを 解析して 実行します。

ここでは、 Cシェルコマンドと UNIXの ユーティリティを 組み合わせて 次のような ことがらに ついて 説明します。

Cシェルの開始

Cシェルは、 ログインしたとき、 OpenWindowsの ワークスペースメニューで コマンドツールを 起動したとき、 csh コマンドを 実行したときに 開始されます。

引数とオプション

コマンド行は、 コマンドと 引数で 構成されています。
ls -l *.ps
という例で考えると、
lsコマンド、 ディレクトリ 内容を 表示させる。
-lオプション、 ls の 動作内容を 規定する。
*.psコマンドの 対象、ls で 表示する ファイル。
と なって います。 オプションと 対象の 部分が 引数と 呼ばれます。 オプションの 詳細に ついては、 オンライン マニュアル (man) を 読んで 下さい。

ファイル名とのマッチング

*? を 使うと 複数の ファイルを 同時に 指定する ことが できることは 既に 学びました。 大括弧 [] を 使うと、 1文字に 対応する 文字の 並びを 指定できます。 例えば [ab]c は ac または bc を 指します。 また [A-Z]* とすれば 大文字で 始まる ファイルを 指すことが できます。

中括弧 {} を 使うと 文字列との マッチングを 行ないます。 例えば {ura,syg}nus は uranus と sygnus を 指します。

コマンド列

コマンドを セミコロン ; で 区切り、 1行中に 複数の コマンドを まとめて 実行する ことが できます。
sw99% cd ~/core-info ; pwd 
/home/99ss999/core-info 
入力している コマンドが 画面の 幅よりも 長いときは バックスラッシュ (\ 日本語端末では 円マーク¥) で 次の 行へ 分割できます。
sw99% cat \  
/etc/hosts 
......

入出力先の切り替え

特に 指定しなければ、 コマンドは 通常 結果を 画面に 表示します。 この場合、 端末が コマンドの 標準出力に なっていると 言います。

また コマンドは 通常 キーボードから 入力した データに 対して 働きます。 この場合、 端末は コマンドの 標準入力に なっています。

UNIX の コマンドは、 ファイルと 装置を 同等に 扱いますから、 コマンドの 出力を どんな ファイルや 装置に 切り替えても かまいません。 また コマンドの 出力を、 パイプと 呼ぶ 特別の 結合記号を 使用して、 直接 他の コマンドの 入力に することも できます。 コマンドの 入力を ファイルから 与えることも できます。

標準出力先の切り替え

コマンド行の 右山括弧 > は、 次の 語が コマンドの 出力先となる (切り替えられた) ファイル または 装置である ことを 表します。 例えば、 次の コマンドでは、 ls コマンドの 出力を、 list という 名前の ファイルに 書き出して います。
sw99% ls / > list
指定した ファイルが すでに ある 場合には、 コマンドは 実行 されません。
sw99% ls
hello   list
sw99% ls /usr > list
list: File exists.
この場合、 rm コマンドで list を 削除してから 実行してください。 既存の ファイルに 上書きして よいことが 確実なら, >! を 使用すれば、 上書き できます。
sw99% ls /usr >! list

既存ファイルへの追加

右山括弧を 2重に する >> と、 既存 ファイルの 末尾に 追加 できます。
sw99% date >> list

入力元の切り替え

コマンドの 出力先を 変更したように、 コマンドの 入力を ファイル (または装置) から 得る ように 指定 できます。 左山括弧 < を 使用して コマンドの 標準入力を 切り替えます。 例えば、 cat list とすれば、 list ファイルの 内容を 表示 できますが、
sw99% cat < list
としても 同じことが できます。

パイプ

パイプを 使うと コマンドの 出力を 直接 別の コマンドの 入力に できます。 入力と 出力を つなぐ パイプは 縦棒 | で 表されます。

例えば、 wc コマンドは ファイルの 中の 行数、 単語数、 文字数を 数える コマンドです。

sw99% cat hello
Hello, computer.
My name is Hanako.
sw99% wc hello
2   6   36 hello 
この コマンドを うまく 使うと、 ファイルの 数を 数える のに 使うことが できます。
sw99% ls /etc | wc
128    128    1117
この場合、行数 = 単語数で 128 が ファイルの 数 である ことが わかります。

パイプを 何段にも 重ねる ことも できます。 例えば grep コマンドは パターンの 合った 行を 出力しますので、 re という 文字列を 含む ファイルだけを 数えるなら、

sw99% ls /etc | grep re | wc
9    9    104
とすれば よい という ことに なります。

フィルタ

wc コマンドの ような、 テキストを 入力し、 解析や 加工の 結果を テキストで 出力する ような コマンドを フィルタと 呼びます。 フィルタには 次の ような ものが あります。
more データを1画面ずつ表示する。
grep 特定のパターンを探す。
head ファイルの先頭だけを表示する。
tail ファイルの末尾だけを表示する。
sort 行を並べ変える。
spell スペルチェック
sed テキストの編集

例題

あなたの 友人の 名前 (First name) を ローマ字で、 10人 ~/core-info/friends という ファイルに 書きなさい。 フィルター コマンドを 使って、 この 名前を アルファベット順に 表示しなさい。
sw99% cd ~/core-info/
sw99% textedit friends &
テキストエディタで名前(ローマ字)を入力し、保存する。
但し、1行に1名とすること。
sw99% sort friends

練習問題

  1. last コマンドは 現在使用中のワークステーションの ログイン歴を表示します。この中から 01ss で 始まる ID を持った人を取り出して表示しなさい。
  2. kanji コマンドはシステムで使用できる漢字のリストを 出力します。これを1画面ずつ表示しなさい。
  3. kanji の出力から、自分の名前の第1文字目が入って いる行を取り出しなさい。

付録

Windows95/98/Me PC での練習には、 のインストールが必要です。