スライド

注意
• 教科書で扱っている対話型シェル
… bash (Bourne-Again Shell)
計算機科学概論
• 授業で扱う対話型シェル
… csh (C Shell), tcsh
第3回
‒我々のシステムの標準対話型シェル
シェル
• 次回以降のシェルスクリプトについては
sh (Bourne Shell)を用いる
シェル
指令
シェルの仕事の例
解釈器
• UNIXにおけるコマンドインタプリタ
‒ユーザからの入力(指令)を受け取り、コマンド
の実行を行う
• シェルも一つのプログラム
• プロンプト(例 %)を表示
• 空白をコマンドや引数の区切りとして扱う
• 「<」や「>」をリダイレクションの指示
と解釈
‒次のようなことも可能
• 「~」をホームディレクトリと解釈
•シェルから別のシェルを起動
• 「% !p」「% !!」
•自分でシェルを作る
コマンドの実行
• % コマンド名 引数1 … 引数n
‒ 間は空白で区切る
コマンドの実行
コマンド
‒ シェルはコマンドが終了するまで待ち、終了したら
プロンプトを表示(フォアグラウンドジョブ)
• % コマンド1 ; コマンド2 ; … ; コマンドn
‒ 複数コマンドを順に実行
•例
% sleep 3
% echo first; sleep 3; echo second
• % コマンド &
‒ シェルはコマンドの実行が終了するまで待たず、す
ぐにプロンプトを表示(バックグラウンドジョブ)
• % コマンド1 & … & コマンドn &
•例
% sleep 3 &
% echo first & sleep 3 & echo second &
標準入出力と
リダイレクション・パイプ
ジョブ制御
% コマンド &
•例
‒% …/Emacs
• 「<」, 「>」, 「|」をリダイレクショ
バックグラウンド
‒^Z
% fg
‒% bg
‒% fg %1
% fg
% bg
ン・パイプの指示と解釈
サスペンド
• 実行されるコマンドの標準入出力の割り
当てを一時的に変更
^Z
• 「自分でシェルを作る」演習ではこの部
フォアグラウンド
分を作らなくてはならない
% コマンド
‒3年次「ソフトウェア演習I」
シェル変数
• シェルにもプログラミング言語と同様の
変数がある
% set 変数名=値
% set
% unset 変数名
変数に値を代入
変数一覧
変数を消去
• コマンド中の「$変数名」はその変数の値
で置き換えられる
シェル変数
% set foo=abcd
% echo $foo
•(% echo abcdと同じ)
% echo $foo$foo > $foo
•(% echo abcdabcd > abcd と同じ)
% cat abcd
% unset foo
% echo $foo
特殊な変数
• いくつかの変数はシェルの動きに影響を与える
‒ prompt … プロンプト文字列
% set oldprompt="$prompt"
% set prompt="test$ "
% set prompt="$oldprompt"
‒ path … コマンドの検索パス
• 通常はシェルの初期設定ファイルに記述
‒ /.cshrc, /.login
環境変数
• 通常のシェル変数
‒作業用
‒実行したコマンドに引き継がれない
‒いくつかの変数はシェル自体の動作に影響
• 環境変数
‒実行したコマンドに引き継がれる
‒シェルから起動されるコマンドの動作に影響
環境変数
• 環境変数の操作
• 「ファイル名のパターン」を表す表現
% setenv 変数名 値
% setenv PAGER cat; man ls
man ls
• これも通常は初期設定ファイルに記述
•例
% echo *.p
% ls -l [a-z]*/mondai*
% echo .*
特殊な置換
• 以下の置換は対応するファイル名が存在
しなくても起こる
•例
% ls ~/*~
ホームディレクトリ
分配法則
% echo a{b,c{z,x}}
% mv foo{,.bak}
「…」中のいずれか
–[…]
•例
–{○,…,○}
任意の1文字
–?
% unsetenv 変数名
–~, ~ログイン名
任意の文字列
–*
% printenv 変数名
% unsetenv PAGER;
ファイル名置換
脱出文字とクオート
• 「<」「$」「*」などに特殊な意味を持たせな
いための仕掛け
‒ 直前に脱出文字「\」を付ける ここの環境では
‒ クオート(「’」や「"」)で括る 「¥」キーで入力
•例
%
%
%
%
%
%
echo
echo
echo
echo
echo
echo
\* \< \\
a b a\ \ b
’* < \’
"a b" a" "b
’$HOME’ "$HOME"
’"’ "’" \" \’