コンピュータ入門 第16回 - Nagoya Institute of...

31
20101 コンピュータ入門 16UNIXのツールたち シェルスクリプト⼊⾨ シェルスクリプト⼊⾨ 本日の話題 とっても便利なUNIXのツール(コマンド)たち テキスト12章 cut, touch, sort .... 正規表現⼊⾨ テキスト12章 12.7.1 いろんな⽂字列パターンを簡単に表現 grep, sed を使ってみよう 2010年度コンピュータ入門 2 シェルプログラミング⼊⾨ テキスト3章,13章 シェルスクリプトって? 変数,制御制御⽂

Transcript of コンピュータ入門 第16回 - Nagoya Institute of...

  • 2010年

    1

    コンピュータ入門 第16回

    UNIXのツールたちシェルスクリプト⼊⾨シェルスクリプト⼊⾨

    本日の話題

    とっても便利なUNIXのツール(コマンド)たちテキスト12章cut, touch, sort ....

    正規表現⼊⾨テキスト12章 12.7.1いろんな⽂字列パターンを簡単に表現grep, sed を使ってみよう

    2010年度コンピュータ入門 2

    シェルプログラミング⼊⾨テキスト3章,13章シェルスクリプトって?変数,制御制御⽂

  • 2010年

    2

    UNIXのツールたち

    便利に使って作業効率UP!

    UNIXのコマンド

    UNIXはもともと科学技術関係の研究⽤システムとして開発

    研究・開発に必要・便利なさまざまなコマンドがある

    ⾼機能なコマンドからシンプルなものまでUNIXコマンドは,⼩さな機能をもつコマンドを組み合わせて複雑

    2010年度コンピュータ入門 4

    ⼩さな機能をもつコマンドを組み合わせて複雑な処理をさせることができる!!

    リダイレクションやパイプを⽤いたコマンド間のデータの受け渡し機能を存分に利⽤

  • 2010年

    3

    UNIXのツールの考え方

    UNIXはもともと科学技術関係の研究⽤システムとして開発

    ⼤量のデータに対して、同じ処理を繰り返し⾏うのに適している。誰がいつ実⾏しても同じ実験結果が出るようにするのに適している。

    つまり

    処理の⾃動化が簡単にできるように作られている。

    2010年度コンピュータ入門 5

    つまり

    紹介するコマンド

    すべては紹介できないテキストには,よく使う便利なものを選びに選んで掲載掲載

    ここではさらに選りすぐった以下のコマンドを紹介

    cut : ⼊⼒⽂字列から指定された部分を切り出しsort: あるルールに従ってデータを整列tr : ⽂字を置き換え

    2010年度コンピュータ入門 6

    touch: ファイルにお触りgrep: 指定された⽂字列を含むものを表⽰sed: ⼊⼒⽂字列中の指定されたパターンを置換

  • 2010年

    4

    オンラインマニュアル(おさらい)

    UNIXでは,ほとんどすべてのコマンドに対するオンラインマニュアルを完備

    コマンドや,ファイル,機能に関する詳細な説明“man”コマンドで参照

    例 “cse$ man man”: manコマンドに関するマニュアル

    UNIXを利⽤する上で,オンラインマニュアルの活⽤は必須.

    2010年度コンピュータ入門 7

    たいていのことはマニュアルに記載⼈に聞く前にマニュアルを読む

    最近はほとんど⽇本語のマニュアルになっている

    オンラインマニュアルの見方

    $ man ls

    • [space] で Page Down

    • ‘b’ で Page Up

    • ‘q’ で終了

    2010年度コンピュータ入門 8

    q で終了

  • 2010年

    5

    日本語マニュアルに関する注意

    ほとんどのマニュアルはもともと英語で書かれている。

    どこかの親切な⼈がボランティアで⽇本語に訳してくれている。⽇本語版を販売しているメーカーが嫌々訳している。

    ありがたいんだけどあまりいい⽇本語ではな

    2010年度コンピュータ入門 9

    ありがたいんだけどあまりいい⽇本語ではない場合が多い。興味のある⼈は英語のマニュアルを探して読んでみよう。

    コマンドの紹介

  • 2010年

    6

    UNIXでよく用いられるデータ形式

    エディタで作成できる「テキスト」これを「プレーンテキスト」データなどというこれを「プレ ンテキスト」デ タなどという

    ⾏列形式各⾏の区切りは改⾏記号各列(フィールド)は区切り⽂字(スペース、”,”など)で区切られている

    ⾏ 意味 あ た デ タ1⾏に意味のあるひとかたまりのデータ

    データ作成に⽤いたプログラムが無くなっても、これなら何とかなる。

    2010年度コンピュータ入門 11

    データファイルの例

    TOTO 1982 TOTO IV Rosanna 5:32

    TOTO 1982 TOTO IV Make Believe 3:48

    TOTO 1979 Hydra All Us Boys 5:03TOTO 1979 Hydra All Us Boys 5:03

    TOTO 1981 Turn Back Goodbye Elenore 4:54

    Journey 1981 Escape Keep On Runnin’ 3:40

    Journey 1983 Frontiers Separate Ways 5:27

    • 区切り文字は

    2010年度コンピュータ入門 12

    区切り文字は

  • 2010年

    7

    実際のデータ

    TOTO1982TOTO IVRosanna5:32TOTO1982TOTO IVMake Believe3:48TOTO197982TOTO IVMake Believe3:48TOTO1979HydraAll Us Boys5:03TOTO1981Turn BackGoodbye Elenore4:54Journey1981EscapeKeep On Runnin’3:40Journey1983FrontiersSeparate Ways5:27

    2010年度コンピュータ入門 13

    以下紹介するコマンドは、このようなプレーンテキストデータを処理するのに適したもの

    cut コマンド

    名前通り…切り出すプログラム指定された⽂字を区切り⽂字(delimiter, separator)としてフィールド(カラム)に分離( )指定したフィールドのみを出⼒

    よく使うオプション-d 区切り⽂字 : 区切り⽂字を指定

    スペースなどシェルに対する特殊⽂字は “ “で囲む例 -d“ “ ←スペースを区切り⽂字にしたい時

    -f フィールド番号 : 最初から何番⽬のフィールドを出⼒

    2010年度コンピュータ入門 14

    f フィ ルド番号 : 最初から何番⽬のフィ ルドを出⼒するか?

    複数指定するときは,”,(コンマ)”で区切る例 -f1,2,5

    -c ⽂字リスト : 任意⽂字⽬を区切りにする-b バイトリスト : 任意のバイト⽬を区切りにする

  • 2010年

    8

    cut の使用例

    $ echo “aaa:bbb:ccc:ddd:eee”| cut -d: -f1,3aaa:ccc

    $ ls *.texreport1.tex report2.tex report3.tex$ ls *.tex | cut -d. -f1report1report2report3

    2010年度コンピュータ入門 15

    “cut [オプション] ファイル名”のように⼊⼒ファイル名を指定すると,ファイル内のデータを cut!!

    “cat ファイル名 | cut [オプション]” と同じファイルの中身を表示するコマンド

    やってみよう

    echo "aaa,bbb,ccc,ddd"echo "aaa,bbb,ccc,ddd" | cut -d, -f1,3whowho | cut -d" " -f1

    ls -1 *.texl 1 * t | t d f1

    2010年度コンピュータ入門 16

    ls -1 *.tex | cut -d. -f1

    ls -1 コマンドは1⾏に1ファイル名で出⼒される

  • 2010年

    9

    sort コマンド

    名前通り…整列する(並べ替える)コマンド⼊⼒データの各列を数字 or アルファベット順に並べ替えて出⼒えて出⼒

    よく使うオプション-n : 番号順に整列

    これをつけないと,⼀⽂字ずつ辞書順で整列例 111と23を与えた時,-n なし: 111, 23-n あり: 23, 111

    2010年度コンピュータ入門 17

    -t 区切り⽂字 : フィールドの区切り指定-k フィールド番号: 何番⽬のフィールドを使って整列させるか?-r : 逆順整列(普通は昇順)

    sort の使用例

    $ cat sort-datakatayama:200:takumi:100:

    $ sort sort-datakatayama:200:katayama:30:

    katayama:30:takumi:90:

    katayama:30:takumi:100:takumi:90:

    $ sort -t : -k 2 sort-datatakumi:100:

    $ sort -n -t : -k 2 sort-datakatayama:30:

    2010年度コンピュータ入門 18

    takumi:100:katayama:200:katayama:30:takumi:90:

    katayama:30:takumi:90:takumi:100:katayama:200:

  • 2010年

    10

    やってみよう

    ls -l

    ls -l | sort -n -k 5ファイルサイズでソートされるはず

    ls -l | sort -k 6⽇付でソートされるはず

    2010年度コンピュータ入門 19

    ⽇付でソ トされるはず⽇付は数字じゃないので -n は指定していない

    tr コマンド

    tr … TRanslates characters1⽂字単位での⽂字の置き換えコマンド1⽂字単位での⽂字の置き換えコマンド

    sed は複数の⽂字(⽂字列)の置き換え使⽤例

    tr ʼ[a-z]ʼ ʼ[A-Z]ʼ⼊⼒⽂字列の⼩⽂字をすべて⼤⽂字に変換

    2010年度コンピュータ入門 20

    tr ʼ[A-Z]ʼ ʼ[a-z]ʼ⼊⼒⽂字列の⼤⽂字すべて⼩⽂字に変換

    tr -d ʼ¥nʼ⼊⼒データから改⾏(¥n)をすべて削除

  • 2010年

    11

    touch コマンド(テキストなし)

    指定されたファイルが存在する場合,ファイルの更新⽇時を更新指定されたファイルが存在しない場合,新しくファイルを作成(中⾝は空っぽ)

    よく使うオプション

    2010年度コンピュータ入門 21

    -a : アクセス時刻のみ変更-m : 変更時刻のみ変更-c : ファイルがない場合作らない-t 時刻 : 指定時刻に変更(普通は現在時刻)

    touch の使用例

    $ ls -l

    rw 1 e000010 system 49 05月27日 19:03 sort data-rw------- 1 e000010 system 49 05月27日 19:03 sort-data

    $ touch chotto

    $ ls -l

    -rw------- 1 e000010 system 0 05月27日 19:12 chotto

    -rw------- 1 e000010 system 49 05月27日 19:03 sort-data

    $ touch sort data

    2010年度コンピュータ入門 22

    $ touch sort-data

    -rw------- 1 e000010 system 0 05月27日 19:12 chotto

    -rw------- 1 e000010 system 49 05月27日 19:13 sort-data

  • 2010年

    12

    正規表現入門

    正規表現とは?

    詳しくは計算機⾔語等の講義でここでは以下のように考える⽂字やその繰り返しを表す特殊な表現(特殊⽂字)を⽂字 繰り返 表 特殊な表現(特殊⽂字)⽤いて,任意の⽂字列パターンを現すもの

    例「⼩⽂字のアルファベット5⽂字からなる⽂字列」という意味の正規表現

    [a-z][a-z][a-z][a-z][a-z]「⼩⽂字のアルファベットの後ろに数字がくっついている⽂字列」と う意味の正規表現

    2010年度コンピュータ入門 24

    という意味の正規表現[a-z]*[0-9]*

    正規表現にもいろいろな種類があるここでは,sed, grep で⽤いられるものを扱う

    オンラインマニュアル regexp を参照!!

  • 2010年

    13

    正規表現での特殊文字

    特殊⽂字⽂字列のパターンを現すために⽤いる記号(⽂字)特殊⽂字 組み合わせ 好きな⽂字列 パタ ンを表特殊⽂字の組み合わせで,好きな⽂字列のパターンを表現

    特殊⽂字の種類と意味. : 任意の1⽂字[abc] : a,b,c のいずれか1⽂字[^abc] : a,b,c 以外の1⽂字

    中 「

    ^ : ⾏の先頭$ : ⾏の末尾¥{m¥} :直前で指定した⽂字のm回の繰り返し

    2010年度コンピュータ入門 25

    ^ は [ ] の中で⽤いると,「〜でない」という意味

    [0-9] : 0から9のいずれか1⽂字* : 直前の⽂字の0回以上の繰り返し

    ⽂字のm回の繰り返し¥ : 特殊⽂字を特殊⽂字として扱いたくない場合にエスケープ

    テキストに,他にもいろいろ載っているので,各⾃確認すること.

    より詳細には,オンラインマニュアル参照の事

    正規表現の例

    みなさんの基盤ID例 cin15000, cht15000…

    先頭の⼀⽂字が”c” 続いて⼩⽂字のアルファベット先頭の ⽂字が c ,続いて⼩⽂字のアルファベットが2⽂字、数字が5⽂字

    正規表現で現すと…^c[a-z][a-z][0-9][0-9][0-9][0-9][0-9]or ^c[a-z]¥{2¥}[0-9]¥{5¥}

    基盤 は

    2010年度コンピュータ入門 26

    基盤IDは⽇本語では「先頭が"c"でそのあとに⼩⽂字のアルファベットが2⽂字、数字が5⽂字続く⽂字列」正規表現では「 ^c[a-z]¥{2¥}[0-9]¥{5¥} 」

  • 2010年

    14

    正規表現の例

    パスワードのエントリ例cin15000:xxxxxx:100:200:TEST:/home/22115/cin1

    “ypcat passwd” というコマンドで確認できます

    cin15000:xxxxxx:100:200:TEST:/home/22115/cin15000:/bin/bash

    : で区切られた7つのフィールドユーザ名:パスワード:UID:GID:GCOS:ホーム:ログインシェル

    ⽇本語で表すと「":"で区切られた7つの⽂字列からなり、そのうち3,4番⽬の部分は数字。また各⽂字列は空でもいい。」

    正規表現で現すと

    2010年度コンピュータ入門 27

    正規表現で現すと^[^:]*:[^:]*:[0-9]*:[0-9]*:[^:]*:[^:]*:[^:]*ユーザ名やファイル名に使える⽂字は限定されているので、厳密には正確ではないが…

    正規表現を使うコマンド

    正規表現を利⽤して,さまざまな⽂字列マッチングを⾏う事で便利に使えるコマンドがある

    grep : Global Regular Expression Print与えられた正規表現にマッチする⽂字列を含む⾏を出⼒つまり検索を⾏うコマンドよく使うオプション

    -v : 指定された正規表現にマッチする⽂字列を含まない⾏を出⼒

    d S i

    2010年度コンピュータ入門 28

    sed : Stream EDitorsed コマンドにデータを流し込むと,正規表現で書かれた⽂字列パターンにマッチ(合致)する⽂字列を次々に処理

    ⼤量のデータの⾃動変更に便利

  • 2010年

    15

    grep の例

    パスワードファイルから,cin15で始まるユーザ名のエントリのみ出⼒

    t d | ʼ^ i 15[0 9]* ʼypcat passwd | grep ʼ^cin15[0-9]*:ʼもうちょっと正確にはypcat passwd | grep ʼ^cin15[0-9]¥{3¥}ʼ(cin15で始まりその後に数字が3つ続くエントリ)もうちょっとずるをするとypcat passwd | grep cin15(パスワードファイルにcin15を含むエントリ)

    2010年度コンピュータ入門 29

    (パスワ ドファイルにcin15を含むエントリ)

    「ログインシェルが/bin/bashの⼈」以外を出⼒

    ypcat passwd | grep -v ʼ/bin/bash$ʼ

    なぜ ' が出てくるの?

    おさらいeconomy tex macro tex micro c micro texeconomy.tex, macro.tex, micro.c, micro.tex

    があったとする

    ls *.tex

    ls economy tex macro tex micro texshellが置き換えてくれる

    2009年度コンピュータ入門 30

    ls economy.tex macro.tex micro.tex

    OSが上記コマンドを実⾏OSは置き換えられた結果だけを実⾏している!

  • 2010年

    16

    なぜ ' が出てくるの?

    shellにも*などのメタキャラクタがある。grep ^cin[0-9]*: とするとgrepに渡される以前にg p [ ] g pshellが*を変換しようとしてしまう。(変換されない場合もある。)

    ルールshell は ' ' で囲まれた部分は変換しないshell は で囲まれた部分は変換しない。該当するファイル名がない場合はメタキャラクタを変換せずにそのままコマンドに渡す。

    2009年度コンピュータ入門 31

    やってみよう

    ypcat passwd

    ypcat passwd | grep 22115

    ypcat passwd | grep ⾃分のlogin名ypcat passwd | grep bw

    2010年度コンピュータ入門 32

  • 2010年

    17

    sed の例

    ファイル中の bigin を begin に変換sed ’s/bigin/begin/g’ ファイル名g g g

    s: 変換しなさい/変換前⽂字パターン/変換後⽂字パターン/g: 同じ⾏に複数ある場合はすべて

    g をつけないと,⼀度変換してしまうとその⾏は終了

    ⾏頭のスペースを削除

    2010年度コンピュータ入門 33

    sed ’s/^[(スペース) ]*//’先頭(^)のスペースの繰り返し(*)を空⽂字列に変換.つまり削除

    sed のちょっと複雑な変換例

    パスワードエントリからユーザ名とログインシェルを抜き出す

    出⼒は 「 ザ名 グインシ ル 」 形式としよう出⼒は 「ユーザ名:ログインシェル 」の形式としようパスワードのエントリは以下の通りユーザ名:パスワード:UID:GID:GCOS:ホーム:ログインシェル

    つまり:で区切られた7つのフィールドの1つめと7つめを出⼒する

    2009年度コンピュータ入門 34

    パスワードエントリの正規表現[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*

    [^:]* (:以外の⽂字列)を ☆で表すとすると☆:☆:☆:☆:☆: ☆:☆

  • 2010年

    18

    sed のちょっと複雑な変換例

    sed では ¥(¥)でくくるとその部分が保存され,後から ¥数字 で参照できる後 数字 参照

    ☆で表現すると

    ypcat passwd | sed 's/¥(☆¥):☆:☆:☆:☆:☆: ¥(☆¥)/¥1:¥2/'

    正規表現に戻すと

    2009年度コンピュータ入門 35

    正規表現に戻すと

    ypcat passwd | sed ʼs/¥([^:]*¥):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:¥([^:]*¥)/¥1:¥2/ʼ

    実際は改行なし

    「答えは一つじゃない」

    UNIXでは同じことをするのにいろいろな⽅法が考えられますそれでいい! ⾃分の好みの⽅法を使いましょうそれでいい! ⾃分の好みの⽅法を使いましょう。100⼈いれば100種類の答えがあってあたりまえ。

    「パスワードエントリからユーザ名とログインシェルを抜き出す」

    さっきはsedで実現したcut コマンドでもできる

    2010年度コンピュータ入門 36

    cut コマンドでもできるawk という別のコマンドを使う⽅法もある(⿊柳の好きな⽅法)最近のはやりは perl という⾔語を使う⽅法Emacs の⽅形カット機能(M-x kill-rectangle)を使ってもできるEmacs で⼿動で(⼒業で)削除するのもありといえばあり

  • 2010年

    19

    シェルプログラミング入門

    シェルプログラミングってなに?

    シェルプログラミングシェルスクリプト(shell script)を作成し,実⾏する事

    script = 芝居などの台本のことshell script = shell の台本= 複数コマンドの⾃動実⾏のための台本

    上 ⼒す ドを

    2010年度コンピュータ入門 38

    gnome-terminal上で⼊⼒するコマンドをそのままファイルに記述して⼀気に実⾏する台本を書くことができる!

  • 2010年

    20

    はじめに注意事項を

    皆さんが使っている shell は bash です。echo $SHELL とやってみようecho $SHELL とやってみよう

    bash を⽤いた shell script もあります。

    が、ここでは基本となる sh を使う shell

    2010年度コンピュータ入門 39

    script について勉強することにします。bash は sh の上位互換 (sh で実⾏可能なものはbashでも実⾏可能)

    シェルスクリプトの作成法

    $ pwdfoo

    よく行う作業ファイルにそのまま書く

    $ date$ ls pwd

    date ls

    foo

    そのファイル名で中に書いてある連の作業を実行できる

    2010年度コンピュータ入門 40

    $ foo

    一連の作業を実行できる

    簡単!

  • 2010年

    21

    シェルスクリプト

    既存のコマンドと全く同様に使える(リダイレクション、パイプなど)

    ⾃分専⽤のコマンドを簡単に作成することができる。if for などの条件⽂やループ処理も使えるの

    2010年度コンピュータ入門 41

    if, for などの条件⽂やル プ処理も使えるので、⼀種のプログラムを作ることができる

    シェルスクリプトの作成法 (ちょっと大げさでした)

    foo#!/bin/sh

    pwd date ls

    % chmod u+x foo

    先頭で「shを使って実行してください」という宣言を

    する

    2010年度コンピュータ入門 42

    % chmod u+x foo

    一つのファイルにつき一回でOK。

  • 2010年

    22

    やってみよう

    emacs foo &

    foo というファイル名で以下の内容を保存#! /bin/shpwddatels

    2010年度コンピュータ入門 43

    chmod u+x foo

    ./foo

    ./foo | sort | less

    シェルプログラミングの基本事項(1)

    基本事項コメント

    # 始まる⾏は プ グラムとし 実⾏されな# で始まる⾏は,プログラムとして実⾏されない変数(後述)

    変数とは,値を⼊れておく⼊れ物変数名=値 で変数に値を代⼊変数の中⾝を参照する時は,$変数名

    #/bi / h

    2010年度コンピュータ入門 44

    #/bin/sh# ここはコメントi=Helloecho iecho $iecho $iWorldecho ${i}World

    % ./helloiHello

    HelloWorld

    実行

  • 2010年

    23

    シェルプログラミングの基本事項(2)

    コマンド置換` (バッククオート) で囲むと,その部分がコマンドの実⾏結果に置き換わる( ʼ (シングルクオート)ではないので注意)に置き換わる( (シングルクオ ト)ではないので注意)

    #!/bin/shecho “Now, it is `date`”

    % ./nowdateNow, it is 2010年05月28日 16時36分43秒

    2010年度コンピュータ入門 45

    他にもいくつか注意点があるので,テキストに目を通しておく事!!

    以下、プログラミングに関する話があります

    詳しいことについては、後半の授業、「プログラミングI」にてプログラミングについて勉強した後に、書 内容が ず書いてある内容がわかるようになるはずです。

    でも、ちょっとやってみればきっと理解できます。

    来週からの課題で若⼲使⽤しています。

    2010年度コンピュータ入門 46

    来週からの課題で若⼲使⽤しています。プログラミングの講義の前に,がんばって理解してみましょう。

  • 2010年

    24

    制御構造

    計算機に仕事をさせる時の基本的な構造逐次処理逐次処理

    命令を書かれた順に処理今までの例はすべて逐次処理

    選択処理条件にしたがって処理する内容を変更

    反復処理

    2010年度コンピュータ入門 47

    反復処理同じ処理を繰り返し

    選択処理

    if ⽂条件によって処理する内容を変える

    if 条件then条件が真の時の処理(複数⾏可)fiif 条件then

    2009年度コンピュータ入門 48

    then条件が真の時の処理(複数⾏可)else条件が偽の時の処理(複数⾏可)fi

  • 2010年

    25

    選択処理

    条件によって処理する内容を変える

    いくつでも書ける

    if 条件then処理1elif 条件2then処理2

    2009年度コンピュータ入門 49

    なくてもよい

    else処理3fi

    選択処理

    #!/bin/shffname=xxxx.txt

    if [ -f $fname ] thenecho $fname exists.

    elseecho $fname is not found.

    fi

    $fname が存在していたら

    2010年度コンピュータ入門 50

    fi

    [ -f filename ] は,filename というファイルが存在した時に成り立つ詳しくは 13.3.1, 13.3.4参照

  • 2010年

    26

    変数

    ⽂字列を保存することが出来る箱任意の名前をつけることが出来る任意の名前をつけることが出来る

    filename=hoge.txt

    echo $filenamefilename という名前の変数

    echo $filename

    echo $filename exists.

    2009年度コンピュータ入門 51

    filename という変数の中身

    選択処理の例

    #!/bin/sh#!/bin/shfname=hoge.txt

    if [ -f $fname] thenecho $fname exists.

    elseecho $fname is not found.

    2009年度コンピュータ入門

    52

    fi

  • 2010年

    27

    なにがうれしいの?

    変数 fname の定義を⼀⾏変えるだけで、いろいろな名前のファイルが存在するかどうかを確認できる。変数 fname の中⾝を変えて、繰り返しこのシェルスクリプトを実⾏すれば、⾃動的にたくさんの名前のファイルが存在するかどうかを確認できるを確認できる。

    2009年度コンピュータ入門 53

    反復処理

    同じ内容を繰り返すfor ⽂

    #!/bin/shfor syurui in txt tex dvi psdofor ⽂

    for 変数 in 単語リストdo処理1処理2

    …done

    doecho $syurui

    done

    %./for-testtxt tex

    2010年度コンピュータ入門 54

    donedvips

    変数に単語リスト中の単語をひとつずつ代入し,

    do と done の間の処理を繰り返し行

  • 2010年

    28

    おさらい(ファイル名の展開)

    aaa, bbb, ccc という3つのファイルが存在するディレクトリの場合、

    % ls -l *

    % ls -l aaa bbb ccc

    Shell が * を存在するファイルのリストに展開してくれる

    Shell の内部処理

    2010年度コンピュータ入門 55

    「ファイルリストが出力される」

    よく用いる反復処理の例

    For filename in *dols l $filenamels -l $filenamewc $filename

    done

    $filename が存在するファイルの名前に順番に置き換えられて、ファイルの存在する回数だけ繰り返し実⾏される

    2010年度コンピュータ入門 56

    る。

    このスクリプトを実⾏したディレクトリに存在するファイルすべて(ʼ*ʼの部分)について、ʼls -lʼとʼwcʼを順番に実⾏する

  • 2010年

    29

    その他

    選択処理他にも,case ⽂(13.3.5) がある

    反復処理反復処理他にも,while ⽂(13.3.3) がある

    スクリプト作成時の注意事項単語は全て空⽩で区切ること。

    2010年度コンピュータ入門 57

    全⾓の⽂字と半⾓の記号を区別すること。コメント以外に全⾓の⽂字は使わない!

    最後に改⾏を忘れないこと。

    #!/bin/shWD report

    その他

    if と for を使った例xxxx.tex というファイル名に対して この部分でWD=report

    cdcd $WD

    for filename in *.texdoif [ -f `echo $filename | cut -d. -f1`.dvi ]then

    echo $filename has already compiled.

    対して,この部分でxxxxという名前を⽣成している

    $filename を受け取って,区切り⽂字 .⼀番⽬のフィールド出⼒その後ろに,”.dvi” をくっつける

    2009年度コンピュータ入門 58

    echo $filename has already compiled.elseplatex $filename

    fidone

    xxxx.tex というファイル名に対して,この部分でxxxx.dvi という名前を⽣成している

  • 2010年

    30

    たとえばこんなスクリプトも

    1. 指定されたLaTeXファイルに platex コマンドを実⾏

    2. platexが成功したら xdvi で表⽰する3. OK? と聞く4. 'y'と⼊⼒があったら5. dvipdfmxで dviファイルをpdfファイルに

    2010年度コンピュータ入門 59

    5. dvipdfmxで dviファイルをpdfファイルに変換する

    簡単に作れます!

    こんなスクリプトも

    platexコマンドで⽣成されるファイル(* aux * log * dvi)を削除する(*.aux, *.log, *.dvi)を削除する。作成から1ヶ⽉以上たった古いファイルを全てoldというディレクトリに移動する。友⼈5⼈がいまどの計算機の前に座っている

    2010年度コンピュータ入門 60

    かを調べて出⼒する。

    簡単に作れます!

  • 2010年

    31

    今回の演習予告

    passwd ファイルを cut, sed を使っていろいろ遊ぶシェルスクリプトを読むif, for などを使ったシェルスクリプトを作成する

    2010年度コンピュータ入門 61

    今回の講義資料,テキストだけでは⾜りないオンラインマニュアルを活⽤しよう!!