Comments
Description
Transcript
配付資料
計算機科学概論 シェル (2016 年 10 月 21 日) 山本 光晴 1 注意 参考書ではbash(Bourne-Again Shell) を題材として対話型シェルの説明をしているが、この演習ではこれまで我々 が使用してきたcsh (C Shell) やtcshについて説明する。なお、シェルスクリプト (次回) に関しては参考書と同様、sh (Bourne Shell) を使用する。 2 シェルとは • シェル . . . UNIX におけるコマンドインタプリタ。 ユーザからの入力 (指令) を受け取り、コマンドの実行を行う。 • シェルも一つのプログラム。 シェルからシェルを起動することもできる。自分でシェルを作ることもできる。 • 例えばどんなことをやっている? プロンプト (例: %) を表示する。 空白をコマンドや引数の区切りと扱う。 「>」や「<」をリダイレクションの指示と解釈する。 3 「~」をホームディレクトリと解釈する。 「% !p」でpで始まる最近のコマンドを実行する。 「% !!」で一つ前のコマンドを実行する。 コマンドの実行 • % コマンド名 引数1 . . . 引数n コマンド名と引数の間、引数と引数の間は空白で区切る。 シェルはコマンドが終了するまで待つ (フォアグラウンドジョブ)。 • % コマンド1 ; コマンド2 ; . . . ; コマンドn コマンド1 . . . コマンドn を順に実行する。 • % コマンド & シェルはコマンドが終了するまで待たない (バックグラウンドジョブ)。 • % コマンド1 & コマンド2 & . . . & コマンドn & 4 ジョブ制御 % /Network/Applications/Emacs.app/Contents/MacOS/Emacs emacsを起動。 (「&」を付けるのを忘れた !!) ^Z emacsを一旦停止させる (サスペンド)。 % bg バックグラウンドジョブへ。 % fg %1 フォアグラウンドジョブへ。 fgやbgの対象を指定したいときは、「% fg % ジョブ番号」や「% bg % ジョブ番号」とする。ジョブ番号は「% コ マンド &」や「% bg」の後に表示される。「% jobs」でジョブ一覧を表示。 5 標準入出力とリダイレクション・パイプ リダイレクションやパイプの処理もシェルが行う。標準入出力とリダイレクション・パイプについては計算機演習 の資料http://www.math.s.chiba-u.ac.jp/~mituharu/lecture/cp1/16/slide-0627.pdf で復習せよ。 6 シェル変数 • 「% set 変数名 = 値」 . . . 変数に値を代入 • 「% set」 . . . 変数一覧 • 「% unset 変数名」 . . . 変数を消去 コマンド中の「$ 変数名」は変数に格納されている値に置き換えられる。 % set foo=abcd % echo $foo % echo $foo$foo > $foo % cat abcd % unset foo % echo $foo 4 特殊な変数 シェルの動きに影響を与える変数の例: prompt プロンプト文字列。 path コマンドの検索パス。 コマンド名に「/」が含まれない場合、この中のパスを順に検索する (cf. which コマンド)。 ignoreeof セットされていると、プロンプトの直後で^D をタイプしてもシェルを終了しない。 通常、シェルの初期設定ファイル (~/.cshrc や~/.login) の中に記述しておく。 環境変数 % % % % setenv 変数名 値 setenv printenv 変数名 unsetenv 変数名 シェルから実行されるプログラムにも情報が伝えられ、プログラムの実行に影響を与える。 % setenv PAGER cat; man ls % unsetenv PAGER; man ls 通常、環境変数の設定も初期設定ファイルの中に記述しておく。 7 ファイル名置換 入力中に以下の部分があると、それはファイル名を表すパターンとみなされ、そのパターンがマッチするファイル 名の列をアルファベット順 (実際には文字コードから派生する辞書式順序) にソートしたものに展開される。 * 任意の文字列にマッチ。ただしファイル名の先頭の「.」にはマッチしない。 ? 任意の 1 文字にマッチ。ただしファイル名の先頭の「.」にはマッチしない。 [. . . ] 「. . . 」中の文字のいずれかにマッチ。[0123cdef] のかわりに[0-3c-f] とも書ける。 以下の置換はその名前のファイルが存在しなくても起こる。 ~ ユーザのホームディレクトリ。ただし先頭にない場合は置換されない。 ~ログイン名 ログイン名で指定されるユーザのホームディレクトリ。ただし先頭にない場合は置換されない。 {○,. . . , ○} 分配法則。ソートはしない。 % echo *.p % ls -l [a-z]*/mondai* % echo .* 8 % ls ~/*~ % echo a{b,c{z,x}} % mv foo{,.bak} 脱出文字とクオート 「<」や「$」や「*」に特殊な意味を持たせないようにするには? • 直前に脱出文字 (Escape Character) 「\」を付ける。 • クオート (「’」や「"」) で括る。 % echo \* \< \\ % echo a b a\ \ b % echo ’* < \’ 9 % echo "a b" a" "b % echo ’$HOME’ "$HOME" % echo ’"’ "’" \" \’ 補足 演習中ではリダイレクションは コマンド < ファイル名 や コマンド > ファイル名 の形であると説明したが、実際には上の形に限られるわけでない。以下の例を実行後、ファイルtest1∼test4の内 容を確かめ、シェルがリダイレクションの指示をどのように解析しているのか考えてみよ。 % echo foo bar > test1 % echo foo > test2 bar % echo > test3 foo bar % > test4 echo foo bar 5