Unixを使う |
トップページ | Unix | Cygwin | Vim | WindowMaker | Zsh | テスト | H.O,K. | curry | 日記 |
|
shellスクリプトを組む 妻によく, "黒画面(コンソール)見ていて楽しい?" と聞かれるのですが, 当然楽しいです. 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とegrepsed を使うsedはStreamEDitorです. テキストに対してさまざまな処理を行えますが, よく使用するのは, 置換です. cut を使う |
トップページ | Unix | Cygwin | Vim | WindowMaker | Zsh | テスト | H.O,K. | curry | 日記 |