シェルの機能の使用例

| ヒストリの例 | alias の例 | リダイレクションの例 | パイプラインの例 | メタキャラクタの例 | シェルスクリプトの例 |

ヒストリの例

例1:historyコマンドにより直前に実行した80個のコマンドを表示 

cc2000(81)% history
     2  14:10   a./a.out
     3  14:10   ./a.out
     4  14:11   emacs cal5.c
     5  14:15   gcc cal5.c
     6  14:15   ./a.out
     7  14:16   emacs cal5.c
     8  14:18   gcc cal5.c
    ・
    ・ 途中省略
    ・
    76  15:11   ls
    77  15:11   cat meta
    78  15:12   lpr -Pccpr02 meta
    79  15:12   ls
    80  15:12   lpr -Pccpr02 meta
    81  15:37   history
cc2000(83)% 
例2:直前に実行した10個のコマンドを表示

cc2000(86)% history 10
    77  15:35   pwd
    78  15:35   man tcsh
    79  15:35   emacs .cshrc
    80  15:41   source .cshrc
    81  10:35   who
    82  10:35   cd public_html
    83  10:35   ls
    84  10:35   emacs index-j.html
    85  10:43   mozilla &
    86  10:45   history 10
cc2000(87)% 
例3:例2のヒストリ番号によるコマンド再実行

cc2000(91)% !77  ← !77 でヒストリの77番目のコマンドを実行
pwd
/NF/home/kyoin0/kitagawa
cc2000(92)% 
例4:例2のヒストリから特定の文字で始まるコマンドを再実行

cc2000(92)% !p  ← !p で以前の p で始まるコマンドを実行
pwd
/NF/home/kyoin0/kitagawa/public_html
cc2000(93)% 

ページ先頭へ戻る

コマンド入力・編集の支援の例

alias によるコマンドの別名定義

例1:コマンドの略称を別名として定義する

cc2000(134)% alias h history  ← これ以降、history コマンドを h という略称で呼び出し可能
例2:コマンドのオプションを常に利用するよう別名定義する(デフォルトオプションの設定)

cc2000(135)% alias rm "rm -i"  ← オプションを指定したい場合は、" で囲みます
            これ以降 rm は常に rm -i として解釈されます(ファイルを削除するか否かを確認します)
例3:別名定義の確認 (alias)

cc2000(136)% alias  ← 現在設定されている別名 (alias) を確認
eclipse /usr/local/java/eclipse/eclipse -data ~/eclipse/workspace &
jlatex  platex209
h       history   ← 上記例1で設定した別名 h 
ls      (ls  --color=auto)
mule    emacs
rm      (rm -i)   ← 上記例2で設定した別名 rm 
script  /NF/local/general/bin/script.sh
timidity        env LANG=C timidity
which   alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde  
cc2000(137)%    ↑これら別名の h と rm 以外は元々システム側が最初から設定してあるもの
例4:別名定義の破棄 (unalias)

cc2000(137)% unalias h   ← 別名定義 h を破棄(コマンド h が使えなくなる)

リダイレクションの使用例

例1. bc コマンドを使用したリダイレクションの例

bc コマンドの説明と準備

bcコマンドは、四則演算をキーボードから入力すると、計算結果をデイスプレイ に表示する機能を持っています(電卓のようなものです)。以下に bc コマンドの実行例を示します(下線部がキーボード入力する部分です)。

例:bcコマンドの実行

cc2000(54)% bc  ← bcコマンドを実行する
1+2
3
2*3
6
4/2
2
quit  ← bcコマンドの終了には quit を入力する
cc2000(55)% 

bc コマンドに対してリダイレクションを行うための準備として、上記の例で行った3つの演算(1+2, 2*3, 4/2)を3行のテキストファイルとして作成し、bc.in というファイル名で保存しておきます。ファイル作成は Emacs で行えばいいでしょう(他にも作成手段はあります)。ファイルが用意できたら、次のように cat コマンドか more / less 等でファイルの中身を確認しておきましょう。

cc2000(64)% cat bc.in  ← 用意した bc.in を cat で画面表示
1+2
2*3
4/2
cc2000(65)% 

bc コマンドに対するリダイレクションの使用

bc コマンドを実行する際に、先に用意したテキストファイル bc.in をリダイレクションによってキーボード入力の代わりに使用します。

例:入力を扱うリダイレクション ( < ) の使用例

cc2000(65)% bc < bc.in  ← bcコマンドにファイル bc.in の中身をリダイレクションで入力
3
6
2    ← この 3, 6, 2 というのが入力ファイルで記述した3つの演算に対する結果
cc2000(66)%

次に、bc を利用して計算を行った結果(標準出力に出力される)をリダイレクションによって、ファイルへ出力します。

例:出力を扱うリダイレクション ( > ) の使用例

cc2000(66)% bc > bc.out   ← bc の計算結果(標準出力)を bc.out というファイルにリダイレクション
1+2
2*3
4/2
quit
cc2000(67)% cat bc.out  ← リダイレクションで作成されたファイル bc.out の中身を確認
3
6
2
cc2000(68)% 

bc コマンドの例の最後として、標準入力、標準出力の両方のリダイレクションを扱う例を示します。

例:標準入力 (入力ファイル bc.in) と標準出力 (出力ファイル bc.out2) を両方扱う例

cc2000(68)% bc < bc.in > bc.out
cc2000(69)% cat bc.out
3
6
2
cc2000(70)% 

ページ先頭へ戻る

例2. 九九の表の作成プログラムを利用したリダイレクションの例

プログラミングの授業で出てくる九九の表の作成プログラム (b99.c) の実行結果をリダイレクションでファイルに保存する例を示します。

例:b99.c をコンパイルして、実行した結果をファイル kekka99 に保存する例

cc2000(92)% gcc b99.c
cc2000(93)% ./a.out > kekka99
cc2000(94)% cat kekka99
1*1 = 1 1*2 = 2 1*3 = 3 1*4 = 4 1*5 = 5 1*6 = 6 1*7 = 7 1*8 = 8 1*9 = 9
2*1 = 2 2*2 = 4 2*3 = 6 2*4 = 8 2*5 =10 2*6 =12 2*7 =14 2*8 =16 2*9 =18
3*1 = 3 3*2 = 6 3*3 = 9 3*4 =12 3*5 =15 3*6 =18 3*7 =21 3*8 =24 3*9 =27
4*1 = 4 4*2 = 8 4*3 =12 4*4 =16 4*5 =20 4*6 =24 4*7 =28 4*8 =32 4*9 =36
5*1 = 5 5*2 =10 5*3 =15 5*4 =20 5*5 =25 5*6 =30 5*7 =35 5*8 =40 5*9 =45
6*1 = 6 6*2 =12 6*3 =18 6*4 =24 6*5 =30 6*6 =36 6*7 =42 6*8 =48 6*9 =54
7*1 = 7 7*2 =14 7*3 =21 7*4 =28 7*5 =35 7*6 =42 7*7 =49 7*8 =56 7*9 =63
8*1 = 8 8*2 =16 8*3 =24 8*4 =32 8*5 =40 8*6 =48 8*7 =56 8*8 =64 8*9 =72
9*1 = 9 9*2 =18 9*3 =27 9*4 =36 9*5 =45 9*6 =54 9*7 =63 9*8 =72 9*9 =81
cc2000(95)% 

ページ先頭へ戻る

例3. KSUの出力をリダイレクション

KSU の出力で(プログラム for2.c)、結果をファイル ksu_result に出力します。

cc2000(103)% gcc for2.c
cc2000(104)% ./a.out > ksu_result   ← ファイル ksu_result に出力するので画面には表示されない
cc2000(105)% cat ksu_result   ← ksu_resultの内容を見て結果が記録されていることを確認
KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU
KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU
KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU
KSU KSU KSU KSU KSU KSU KSU KSU KSU KSU
cc2000(106)% 

ページ先頭へ戻る

パイプラインの使用例

パイプによる bc コマンドと sort コマンドの連携

リダイレクションで使用した bc コマンドの結果を昇順(小さい順)に並べ替える処理を扱います。まずは、パイプを使わずに、リダイレクションを使用して sort を実行する例を示します。

例:bcコマンドの結果をリダイレクションで sort コマンドに対して入力し昇順に並べ替える。

cc2000(70)% bc < bc.in > bc.out を実行後
cc2000(71)% sort -n < bc.out ←ソート(並べ替え)を実行 (オプション -n は小さい順に並べる)
2
3
6
cc2000(72)% 

パイプラインを使うと、上記で実行した2つのコマンドを1行で書くことができます。

例:bcコマンドの結果をパイプで sort コマンドに渡してソート処理を行う

cc2000(72)% bc < bc.in | sort -n
2
3
6
cc2000(73)% 

出力結果は上記のリダイレクションの例と同じですが、パイプラインを使うことで中間的に発生していたファイル(ここでは bc.out)が不要となります。途中結果を残す必要がない場合は、パイプを使うことで手間が省けます。

パイプによる ls コマンドと sort コマンドの連携

次に、ls コマンドで得られたファイルリストに対してソート処理 (sort コマンド) を行う例を示します。

例: ディレクトリ /NF のファイルリストをソートする(リダイレクションで実施)

cc2000(73)% ls /NF   ← /NFのファイルリストを表示
FTP Real WWW active admin common home local usr  ← 結果はアルファベットの昇順に並んでいる
cc2000(74)% ls /NF > NF.out   ← 結果をリダイレクトで NF.out に出力
cc2000(75)% sort -r < NF.out   ← sort の -r オプションは reverse(逆順)の意味
usr
local
home
common
admin
active
WWW
Real
FTP
cc2000(76)% 

この処理をパイプを用いて実行すると次のようになります。

例:ディレクトリ /NF のファイルリストをソートする(パイプで実施)

cc2000(76)% ls /NF | sort -r
usr
local
home
common
admin
active
WWW
Real
FTP
cc2000(77)% 

数あるコマンドの中で、データを標準入力から得て標準出力に結果を表示する ようなコマンドを特にフィルタコマンドと呼んでいます。例えば more や sort などです。 こうしたコマンドを幾つかパイプでつないで使用すると、各コマンドが入力データを 少しずつ変化させて出力するフィルタの役割を果たしているように見えるでしょう。 more は長い出力を一画面ずつ一時停止して表示するフィルタ、sort は結果を並び 替えるフィルタ、というわけです。まだこの段階では余り大した機能の無いコマンド しか紹介していませんが、キーワードを含む行だけを通過させる grep コマンドや、 末尾から指定された行数だけ出力する tail コマンドなどを見れば、まさにフィルタ コマンドと呼ばれる理由がわかるでしょう。

ページ先頭へ戻る

メタキャラクタの使用例

例

cc2000(81)% ls
a.out  bin  bin.c  meta  search  search.c  slen  slen.c  string string.c
cc2000(82)% ls a*      ← ファイル名が a で始まるものをリスト表示
a.out
cc2000(83)% ls b*.*    ← ファイル名が b で始まり、途中に . (ピリオド) があるものを表示
bin.c
cc2000(84)% ls *.c     ← ファイル名が .c で終わるものを表示
bin.c  search.c  slen.c  string.c
cc2000(85)% ls ???     ← ファイル名が3文字のものを表示
bin
cc2000(86)% 

ページ先頭へ戻る

コマンドファイル (シェルスクリプト) の例

コマンドファイルというのは、一連のコマンドを書き込んだファイルであり、それを呼び出すと一連の操作を、キーボードから入力するかわりに、ファイルから順次読み出して実行してくれるものである。コマンドファイルの実行はtcshコマンドで行う。

簡単なコマンドファイルの作成と実行例

cc2000(113)% echo 'date;  pwd' > mycom
cc2000(114)% cat mycom
date;  pwd
cc2000(115)% tcsh mycom
2004年  9月 16日 木曜日 15:31:12 JST
/NF/home/kyoin0/kitagawa
cc2000(116)% 

コマンドファイルを実行可能にするために、

書式: chmod +x コマンドファイル名

とすると、コマンドファイル名がコマンド名となる。

例 %chmod +x mycom
%mycom
2004年  9月 16日 木曜日 15:31:12 JST
/NF/home/kyoin0/kitagawa

ページ先頭へ戻る

Valid HTML 4.01!