シェルスクリプト – 変数 – その2
2011年3月7日 1:28 AM by Abalone




シェルスクリプトで変数に値を設定する部分については前回の記事で書きました。

色々な場面で使われることの多いシェルスクリプト。特に最近の仕事ではシェルスクリプトを扱う機会が増えてきて、付け焼き刃ではどうしようもなくなってきたので、勉強し直している次第。

今回は、変数をさらにやっていこうと思っています。

シェルスクリプトの変数として定義された物を環境変数として設定したい場面は良くあります。よくあるのはPATH。MacOS Xのターミナルとかで”export”を実行すると、実行時点での環境変数が表示されます。その中にはPATHも含まれています。


bash-3.2$ export
(中略)
declare -x PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11R6/bin"
(中略)

このPATHですが、これ、コマンドの格納されているディレクトリを設定する環境変数。コンソールでコマンドを実行したときに、ここで設定されているディレクトリ以下を探して指定された実行ファイルが存在していれば、それを実行するわけですが、これに設定を追加したり、変更したりなんていう操作が必要になることがあります。これ以外にも、JavaのCLASSPATH設定したりとか、変数を環境変数として設定したりしたいケースは他にもあるかと思います。

こういう時には、シェルスクリプトの変数をexportすることが可能。例えば、PATH2という変数を以下のように設定。


bash-3.2$ PATH2="/path2"

これで”export”コマンドを上で実行したように再度実行してみます。色々ユーザー名とかの含まれる情報が表示されるので結果はここには書きませんが、PATH2という変数は存在していません。そこで、PATH2をexportします。


bash-3.2$ export PATH2

今まで環境変数の内容を確認するために使った”export”コマンドですが、今回はシェルスクリプト変数、PATH2を引数として渡しています。この状態で”export”コマンドを再度実行。


bash-3.2$ export
(中略)
declare -x PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11R6/bin"
declare -x PATH2="/path2"
(中略)

すると、こんな感じで環境変数として設定されていることが確認できます。
さらに、最初から環境変数としてexportする形式で代入を行うことも出来ます。


bash-3.2$ export PATH3=/path3
bash-3.2$ export
(中略)
declare -x PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11R6/bin"
declare -x PATH2="/path2"
declare -x PATH3="/path3"
(中略)

“export”に続けて代入文を記述すると、環境に反映されて環境変数になります。こんな感じで、あるプログラムを実行するのに必要とされる環境変数等を設定して、その後、そのプログラムを実行する、なんていうシェルスクリプトを書けます、と。

では、次は設定した変数を削除してみます。変数を削除するには、unsetコマンドを使います。


bash-3.2$ PATH4=/path4
bash-3.2$ echo $PATH4
/path4
bash-3.2$ unset PATH4
bash-3.2$ echo $PATH4

PATH4という変数を定義、echoで内容を確かめた後、unsetで削除して、再度PATH4をechoで確認しています。2度目のechoの時には何も表示されません。
ここで注意が必要なのは、unsetした場合には、変数自体が削除されていることです。変数の中身が空になったのじゃありません。echoで表示させてみると、いずれにせよ何も表示されませんが、環境変数に対してunsetしてみると、これを簡単に確認することができます。


bash-3.2$ unset PATH3
bash-3.2$ export
(中略)
declare -x PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11R6/bin"
declare -x PATH2="/path2"
(中略)

こんな感じで、PATH3は表示もされなくなっています。もし内容が空の変数として変数自体は存在するのであれば、exportコマンドには以下のように出力されます。以下の例では、内容が空の環境変数PATH5を定義して、確認しています。


bash-3.2$ export PATH5=
bash-3.2$ export
(中略)
declare -x PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11R6/bin"
declare -x PATH2="/path2"
declare -x PATH5=""
(中略)

こんな感じになります。こんな感じで環境変数をシェルスクリプトから設定したり、変更したりすることが可能です。





トラックバックURL


この記事に対するコメント/トラックバックはまだありません


コメントをどうぞ

お名前(必須)
Eメールアドレス(公開されません)(必須)