2012年06月15日 情報科学類 コンピュータリテラシ 筑波大学 システム情報系 情報工学域 新城 靖 <yas@cs.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2012/2012-06-15
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
変数名=値
」を使う。
$ X=100
$
参照するには、「$変数名
」とする。
$ X=100
$ echo $X
100
$
他の変数と紛らわしい時には、
「"$変数名"
」のようにダブルクォートで括るとよい。
$ echo x"$X"x
x100x
$
(注意: $Xx と $X は別の変数なので区別できるようにする。)
あるいは、${変数名}
のように、
括弧で括る方法もある。
$ echo x${X}x
x100x
$
シェル変数を削除するには、unset コマンドを使う。
$ unset X
$ echo $X
$ echo x"$X"x
xx
$
設定されていないシェル変数を使おうとすると、空として扱われる。
注意:シェルのプロンプト($
) と間違えないこと。シェルのプロンプ
ト($
) は、実際のコンピュータでは、cosmos38:~ i1012345$
のようになっている。
$ X=100
...
$ export X
$
あるいは、最初から export を付けて代入の操作をすることもできる。
$ export X=100
$
bash では、環境変数の参照方法と削除方法はシェル変数と同じ($
とunset)である。
$ date
2012年 6月13日 水曜日 16時26分16秒 JST
$ echo $TZ
$ TZ=EST
$ export TZ
$ echo $TZ
EST
$ date
2012年 6月13日 水曜日 02時26分32秒 EST
$
date
コマンドは、TZ
が設定されていないと、そのコン
ピュータの標準(coins では、JST
、Japan Standard Time の意味)を利
用して日時を表示する。
% man date
DATE(1) BSD General Commands Manual DATE(1)
NAME
date -- display or set date and time
SYNOPSIS
date [-ju] [-r seconds] [-v [+|-]val[ymwdHMS]] ... [+output_fmt]
date [-jnu] [[[mm]dd]HH]MM[[cc]yy][.ss]
date [-jnu] -f input_fmt new_date [+output_fmt]
date [-d dst] [-t minutes_west]
DESCRIPTION
When invoked without arguments, the date utility displays the current
date and time. Otherwise, depending on the options specified, date will
set the date and time or print it in a user-defined way.
...
ENVIRONMENT
The following environment variables affect the execution of date:
TZ The timezone to use when displaying dates. The normal format is
a pathname relative to /usr/share/zoneinfo. For example, the
command ``TZ=America/Los_Angeles date'' displays the current time
in California. See environ(7) for more information.
...
""
で括ると1単語として扱われる。
$ as="Application Support"
$ echo $as
Application Support
$ ls -ld ~/Library/$as
ls: /home/prof/yas/Library/Application: No such file or directory
ls: Support: No such file or directory
$ ls -ld ~/Library/"$as"
drwx------ 14 yas prof 4096 4 26 12:27 /home/prof/yas/Library/Application Support
$
< > | $ { } ( ) [ ] & ; ^ " * ? ~ ' ` 空白 タブ
など。
コマンドの引数として渡したい時には、解釈を避ける(エスケープ(escape))た めの特殊な形式を使う。
形式 | エスケープ対象 | エスケープしないメタキャラクタ |
\x | 「\ 」の直後の一文字 | なし (行末の「\」は継続行の意味) |
'str' | 「'」でくくられた文字列 | 「'」自身は入れられない。「\'」も効かない。 |
"str" | 「"」でくくられた文字列 | 「$」, 「`」(バッククォート),「"」(ダブルクォート), 「\」,「!」 |
\
は、ASCII 5c(16進)の文字。表示は、「\」か「¥」。
ダブルクォート ""
の内部では、$
は解釈され、シェル変数や
環境変数の置き換えられる。シングルクォート
「''
」では、$
は解釈さない。
$ echo "$HOME"
/home/prof/yas
$ echo '$HOME'
$HOME
$
$ ls -ld "/Applications/QuickTime Player.app"
drwxr-xr-x 3 root wheel 102 3 28 09:11 /Applications/QuickTime Player.app
$ open "/Applications/QuickTime Player.app"
$
バックスラッシュを使ってもよい。
$ ls -ld /Applications/QuickTime\ Player.app
drwxr-xr-x 3 root wheel 102 3 28 09:11 /Applications/QuickTime Player.app
$ open /Applications/QuickTime\ Player.app
$
bashのファイル名補完機能
では、空白を含むファイル名は、バックスラッシュで自動的に補完されることがある。
$ ls -ld /A
$ ls -ld /A![[tab]](../icons/screen-tab.gif)
$ ls -ld /Applications/
$ ls -ld /Applications/Q![[tab]](../icons/screen-tab.gif)
$ ls -ld /Applications/Q![[tab]](../icons/screen-tab.gif)
$ ls -ld /Applications/QuickTime\
$ ls -ld /Applications/QuickTime\ P![[tab]](../icons/screen-tab.gif)
$ ls -ld /Applications/QuickTime\ Player.app/
ファイル名の補完機能を使う時には、空白を打ち込むには、
「\
バックスラッシュ スペース」と打つ必要がある。
補完よりも、ファイル名の置き換え機能が簡単のこともある。
$ ls -ld /A*/Q*P*
drwxr-xr-x 3 root wheel 102 3 28 09:11 /Applications/QuickTime Player.app
$
$ echo $PATH
/home/prof/yas/bin:/usr/local3/coins/macosx/bin:/usr/local3/coins/common/bin:/De
veloper/Simulator/GTKwave/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/
local3/bin:/opt/local/bin:/usr/X11/bin
$ printenv PATH
/home/prof/yas/bin:/usr/local3/coins/macosx/bin:/usr/local3/coins/common/bin:/De
veloper/Simulator/GTKwave/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/
local3/bin:/opt/local/bin:/usr/X11/bin
$
シェルは、打ち込まれたコマンドを環境変数 PATH の中から探して実行する。
たとえば、ls
と打ち込まれると、/bin
にある
/bin/ls
を実行する。
複数のコマンドがみつかれば、PATHの先に見つかったものを実行する。 どのコマンドが実行されるかを確認するには、which コマンドを使う。
$ which ls
/bin/ls
$
$ history
1 saykotoeri2
2 saykotoeri2
3 fg
4 dup
<中略>
500 history
$
シェル変数 HISTFILESIZE の個数だけ記憶している。
$ echo $HISTFILESIZE
500
$
$ ls file.txt
file.txt
ここで -l を付けわすれたのに気がつく
$ ls -l !*
ls -l file.txt
-rw-r--r-- 1 yas prof 9 4 29 21:23 file.txt
$
M-q runs the command fill-paragraph which is an interactive compiled Lisp function in `textmodes/fill'. It is bound to M-q.M-q または Esc q で、標準で 70 以内になるように次のように整える。
M-q runs the command fill-paragraph which is an interactive compiled Lisp function in `textmodes/fill'. It is bound to M-q.整える範囲は、上下に空行で区切られた範囲である。長過ぎる行は、改行が入 れられる。英単語の場合には、途中で改行することはない。日本語の場合には、 標準では、35文字で改行される。
fill-paragraph で、折り返す文字数を変えたい場合には、set-fill-column を 使う。
$ printenv
$ echo $HOME
/home/prof/yas
$ printenv HOME
/home/prof/yas
$
注意: printenv
の引数には、$
を付けない。
次のような環境変数の値を調べなさい。
$ date
$ echo $TZ
$ export TZ=EST
$ date
$ unset TZ
$ date
$
環境変数 TZ
に /usr/share/zoneinfo/
の下にあるファイル名
を設定して、その動作を確認しなさい。
$ echo $HOME
cd コマンドの引数に与えて、ホーム・ディレクトリや
ホーム・ディレクトリ以下のディレクトリに移動してみなさい。
$ cd /
$ cd $HOME
$ cd /
$ cd $HOME/Desktop
$
ファイル名の置き換え機能「~/」を使う方法と環境変数 HOME を使う方法を比
較しなさい。
$ echo $PATH
(表示を確認する)
$ aaaa
-bash: aaaa: command not found (エラーの表示)
$ ls
(普通に実行される)
$ which ls
/bin/ls
$ PATH=/usr/bin
$ ls
-bash: ls: command not found (エラーの表示)
$ exit
この例ではPATH の内容がかなり限定され、普段は実行できるコマンドが実行で
きなくなっている。それで、最後に exit コマンドでシェルを終了している。
シェルが必要ならば、もう一度 iTerm を実行するなどしてシェルを実行する。
$ echo $HISTFILESIZE
history コマンドで表示されるコマンドの数を調べなさい。
$ history
<表示>
$ history | wc
$
wc は、word count の略で、行数、単語数、バイト数を表示する。一番左が行
数である。
シェル変数 HISTFILESIZE の値を変化させると、何が起きるか調べなさい。
cosmos38:~ yas$ echo "$PS1"
\h:\W \u\$
cosmos38:~ yas$
この時、ダブルクォート ""
を付けないとうまく表示できないことがある。この理由を考えなさい。
シェル変数 PS1 は、シェルのプロンプトを保持している。これを変更してみな
さい。
cosmos38:~ yas$ PS1="hi$ "
hi$
マニュアル man bash で、PS1 変数(PROMPTING)の中で次のような表現がどのような意味を 持っているかを調べなさい。
\h
\W
\u
$ set
どのようなシェル変数が設定されているか観察しなさい。
$ u=/Applications/Utilities
$ echo $u
/Applications/Utilities
$ ls $u
Activity Monitor.app Grapher.app
Adobe Utilities.localized Java Preferences.app
AirPort Utility.app Keychain Access.app
AppleScript Editor.app Migration Assistant.app
Audio MIDI Setup.app Network Utility.app
Bluetooth File Exchange.app Podcast Capture.app
Boot Camp Assistant.app RAID Utility.app
ColorSync Utility.app Remote Install Mac OS X.app
Console.app Spaces.app
DigitalColor Meter.app System Profiler.app
Disk Utility.app Terminal.app
Expose.app VoiceOver Utility.app
Grab.app X11.app
$
" "
」 や シングルクォート
「' '
」の働きを調べなさい。
$ echo "$HOME"
(表示の確認)
$ echo '$HOME'
(表示の確認)
ダブルクォート「" "
」 や シングルクォート 「'
'
」は、中に改行を含めることができる。逆に言うと、必ず閉じる
必要がある。閉じられていない場合には、シェルのプロンプトが$
から
>
に変化する。このことを確認しなさい。
$ echo "a
> b
> c"
(表示の確認)
$ echo 'a
> b
> c'
(表示の確認)
$
$ history
$ history | tail -5
(過去の5行だけ表示)
$ history | grep cd
(cd を含む行だけ表示)
$ history | lv
(ページャ lv でページ単位で表示。)
!
の後に番号
!!
^P
/^N
で選択して C-u 数 C-x f
あるいは、折り返したい位置にカーソルを移動してから次のように打つ。
C-x f
以後、M-q または Esc q で折り返しを行った時には、指定
した文字数で折り返される。この機能を確認しなさい。
以下の問題について、問題、および、回答をテキスト・ファイルに記述し、 レポート提出ページから提出しなさい。端末の表示 (コマンドの実行結果)は、コピー&ペースト等の機能を使って提出するファイ ルに含めなさい。課題が達成されたことを示す程度には見やすいように編集し なさい。ただし、過度の編集は避けなさい。編集した部分は必要に応じて省略 記号を入れなさい。
テキスト・ファイルで、右揃えをするには、パラグラフの区切りを、空行にし た上で、M-q (Esc q, M-x fill-paragraph) の機 能を利用するとよい。
(1) 次のファイル名(ディレクトリ名も含めたすべて)を、適当なシェル変数を 設定して短く表現しなさい。
/Applications/Firefox.app /Applications/Thunderbird.app /Applications/QuickTime Player.app短く表現したものを、ls -ld コマンドの引数に与えて実行しなさい。
$ シェル変数の代入1
$ シェル変数の代入2
$ シェル変数の代入3
...
$ シェル変数の代入n
$ ls -ld シェル変数の参照を利用短い表現
drwxr-xr-x@ 3 mac-admin admin 102 1 16 09:29 /Applications/Firefox.app
$ ls -ld シェル変数の参照を利用短い表現
drwxr-xr-x@ 3 mac-admin admin 102 1 12 11:10 /Applications/Thunderbird.app
$ ls -ld シェル変数の参照を利用短い表現
drwxr-xr-x 3 root wheel 102 5 21 2009 /Applications/QuickTime Player.app
$
ヒント1: シェル変数への代入は、1回でもよい。
ヒント2: シェル変数の値に空白が含まれている(可能性がある)ものを参照する
時には、ダブルクォートでくくる("$name"
)とよい。
ヒント3: 補完機能と組み合わせてもよい。その場合にはどのようなキー操作を したのかをレポートに書きなさい。
(2) echo コマンドを使って、次の文字列を画面に表示しなさい。
$ echo 回答内容
Lib*
$
注意:これは、メタキャラクタをエスケープする課題である。単に echo コマ
ンドに対してこのような文字列を与えればよいということでない。
(2) 共通科目情報処理の 情報処理実習用手引き の次の章を読みなさい。
(3) 筑波大学における情報システム利用のガイドライン 、 および、 用語集 を読みなさい。 そして、疑問に思ったこと、または、改善すべきと思ったことを3項目以上示し なさい。この時、次のような情報を含めなさい。
(4) [加点] 以下のコマンドは、環境変数によって動作が変わる。どのような環 境変数でどのように動作が変わるかを man コマンドや The Unix Super Text (30.4.2 節、その他各コマンドの説明) で調べなさい。そして 練習問題(1705) と同様に実際に実行し、動作の 変化を確かめなさい。 全体として、コマンドと環境変数の組で、3 個以上の例を示しなさい。ただし、 環境変数としては PATH, TZ 以外のものを使いなさい。同じ環境変数で、複数 のコマンドの動作が変化するものを含めてもよい。
!,^
など) とコマンド行の編
集機能を比較して、前者が有効である場合を2つ示しなさい。実際に実行して結
果の一部を含めなさい。