Skip to content

Latest commit

 

History

History
87 lines (70 loc) · 4.85 KB

shellvar.md

File metadata and controls

87 lines (70 loc) · 4.85 KB

Unixシェル変数

シェルはシェル変数という名前と値のペアを保持する機能を持っています。

(実習)以下のコマンドを実行し、結果を解釈せよ。

$ a=fufufunofu
$ echo $a
$ b = fufufunofu

変数を定義し代入する際に等号の前後に空白を入れてはいけない。また、変数は代入によって生成され変数名に$をつけた記号によって参照される。変数名は複数文字からなっていてもよい。

クォートの記号の働きが微妙に違うので、注意されたい。

(実習)上のコマンドに続き、次のコマンドを実行し、結果を解釈せよ。

$ echo "$a"
$ echo '$a'

いくつかのシェル変数には既に値が設定されている。

(実習)次のコマンドを実行し、結果を観察せよ。(setコマンドの出力を縦棒記号 | で表すパイプでlessコマンドにつないでいる。パイプについては後述)

$ set | less

setコマンドで表示されるのは、現在利用しているシェルが持っているシェル変数の一覧です。重要なものを見ておくと(setの出力を参照して確認しておくとよい)

USER: 利用者のユーザ名
UID: 利用者のユーザID
HOME: 利用者のホームディレクトリ
SHELL: 利用者が使っているシェル
PATH: コマンドを探すディレクトリのリスト
TERM: 端末の種類
PS1: プロンプト文字列

PATHはコマンドを探すディレクトリの名前を:でつないだリストの形をしています。実行可能ファイルはこのいずれかのディレクトリに入れておくことで、コマンドとしてファイル名を与えただけでシェルによって検索され実行されるようになるのです。同じ名前のファイルがある場合には、前の方にあるディレクトリの中にあるものが優先されます。

$ echo $PATH

で その内容を見ることができます。 存在するはずのコマンドが見つからないときTAに「パスが通ってないんじゃない?」と言われたら、この方法でPATHを確認してください。

自分のホームディレクトリにコマンド用ディレクトリ(例えば~/bin)を作り、PATHに含めることで自分専用のコマンドを増やすことが可能になります。ただしこれには初期設定ファイルを使った方が便利なので、そこで説明します。

(実習)以下を試せ。

$ echo $PATH
$ export PATH=       # PATHを空にする
$ ls                   # 実行できる?
$ pwd                  # こちらは?違いは何?
$ PATH=/bin:/usr/bin
$ ls

(続いて実習を行うためには、いったんシェルを終了し、新しくシェルを動かしなおすこと)

シェル変数を、シェル以外にそのシェルから起動した別のプログラムにも情報を渡せるようにしたものを環境変数と呼び、exportコマンドによって宣言します。詳しくはシェルスクリプトのところで扱います。環境変数はprintenvコマンドまたはenvコマンドによって参照できます。

(実習)次のコマンドを実行し、結果を観察せよ。

$ env
$ printenv

シェル初期設定ファイル

シェル変数、環境変数、aliasなどの個人的な設定を保存するのは、ホームディレクトリにおいた設定ファイルにコマンドを書いておくことによって行います。このファイルにはいくつかの種類がありますが、.bashrcファイルが最も基本的なものです。たいていのLinuxではすでにかなりいろいろなことが書かれている.bashrcファイルがホームディレクトリにありますので、その設定をこわさないよう、.bashrcの末尾に設定を加えます。

(実習)次の2行の設定を.bashrcの末尾に加え、新しいターミナルウィンドウを開いて設定が有効になっていることを確かめよ。

PATH=~/bin:$PATH
a=fufufunofu

ターミナルウィンドウを開き直さないで、既に動いているシェルでこの設定を有効にするには、次のコマンドを実行する(ピリオドに注意)。

$ . ~/.bashrc

誤った設定をすると二度と使えなくなってしまうので注意して下さい。(例えば、.bashrc の末尾に exit を加える…この場合、どうしたらよいか?)

(参考文献)このページの記述は 久野靖『UNIXによる計算機科学入門』(丸善、2004)

を参考にしています。

Next

リダイレクトとパイプ」に進んでください。