Unixを使う
トップページ Unix Cygwin Vim WindowMaker Zsh テスト H.O,K. curry 日記


妻によく, "黒画面(コンソール)見ていて楽しい?" と聞かれるのですが, 当然楽しいです.

GUI(グラフィックユーザインタフェース)は, 初心者にもやさしく, 使いやすいのはわかります.

しかし, 黒い画面(CUI:キャラクターユーザインタフェース)でしか, できないであろう作業もあります.

特に, 大量のデータ(数Mbyteとか数Gbyte)を処理するときに, 非常に効果的です.

また, 何度も同じ操作を行うのに, マウスクリックをやるのは, 腱鞘炎のもとになります.

本章では, Unixのユーザインタフェースであるシェルを中心に記述 します.

2005/3/16時点で, まだまだ書きかけですが, どんどん書いていくつもりです.

なお, 本文の例にある行頭の"$"は, コマンドプロンプトを 示します.

shellスクリプトを組む

BornShell系の, シェルスクリプトについて触れます.

ファイル名展開(globパターン)

シェルからコマンド(関数)に引数が引きわたされる直前に, ファイル名展開が行われ, 複数の文字列に展開されます.

カレントディレクトリに, foo.txt foo.dat が存在する場合, 以下の2コマンドは同じ意味になります.

$ ls *
foo.txt  foo.dat
$ ls foo.txt foo.dat
foo.txt  foo.dat

ファイル名展開で使用できるのは, * ? [x] です.

?は1文字を示し, *は0文字以上の文字を示します. []内に含まれる文字のいずれかを示します.

$ ls   #<= カレントディレクトリ内のファイル一覧
bar.dat  bar.txt  baz.dat  baz.txt  foo.dat  foo.txt
$ ls *.dat #<= 拡張子が .datのファイルすべて
bar.dat  baz.dat  foo.dat
$ ls foo.* #<= ファイル名が fooであるファイルすべて
foo.dat  foo.txt
$ ls ba?.txt #<= 

ファイル名展開は, シェル側で行われ, 実行コマンドに複数の 文字列をして渡されます.

コマンドの実行

コマンドを実行するには, コマンド名を入力します.

$ ls
$ echo "hogehoge"
$ make

なお, exec <コマンド>でもコマンドを実行できますが, コマンド実行直後に, シェルが終了します.

$ exec ls
hoge.txt ...
 <= その後, シェルが終了します. 

変数(パラメータ)

シェルの中で, パラメータを使用することができます.

パラメータの設定は, <変数名>=<値> です. (=の前後に空白をいれてはいけません. )

$ foo="I am foo"
$ bar="hogehoge is made in japan"
$ lscmd="ls"

格納した変数の値を使うには, $<変数名>,もしくは ${<変数名>} とします.

$ echo $foo
I am foo
$ ${lscmd}
hoge.txt hoge.dat

コマンド置換

コマンドの実行結果を, 変数に格納するには, <変数名>=`<コマンド>` とします.

$ baz=`ls`    #<= ファイルの一覧を変数に格納する. 
$ foo=`echo $foo | sed -e 's@I@You@g'`
              #<= 変数の値をsedを使って変更する. 

リダイレクト >, <, >>, <<

パイプ |

分岐 if, case, select

ループ while, until, for

関数

サブシェル

応用1:変数を思いどおりに変更する

応用2:awkを使わずに特定行のみ取り出す.

grepとegrep

sed を使う

sedはStreamEDitorです.

テキストに対してさまざまな処理を行えますが, よく使用するのは, 置換です.

cut を使う


トップページ Unix Cygwin Vim WindowMaker Zsh テスト H.O,K. curry 日記