讃岐小僧のEngineering×Techメモ

未経験から挑戦中のプログラミングや、趣味の野球や狩猟について、その他、ビジネスやテクノロジーをテーマに様々なことをつぶやく場所です。

【Linuxの標準教科書9章】シェル変数と環境変数

はじめに

本記事も前回の記事シェルスクリプトについて part2に続きLinux標準教科書の内容をメモしていきます。

シェル変数と環境変数の動作を確認する

まずはぞれぞれLinux標準教科書の内容に沿って、BBB.shCCC.shの2つのファイルを作成する。

BBB.shは下記の通り

$ vi BBB.sh

#! /bin/bash             #bashを指定する
xxx=123                  # シェル変数にxxxに123を代入する
export yyy=234           # 環境変数yyyに234を代入する
echo xxx=$xxx in BBB.sh  # 変数xxxの値を表示する
echo yyy=$yyy in BBB.sh  # 変数yyyの値を表示する
./CCC.sh                 # CCC.shを実行する

CCC.shは下記の通り

$ vi CCC.sh

#!/bin/bash             # bashを指定する
echo xxx=$xxx in CCC.sh # 変数xxxの値を表示する
echo yyy=$yyy in CCC.sh # 変数yyyの値を表示する  

これらのファイルに実行権限を付与しなければ.....
ということで実行権限を確認する

$ ls -la

-rw-r--r--   1 keisuke  staff  333  9 22 23:10 BBB.sh
-rw-r--r--   1 keisuke  staff  128  9 22 23:14 CCC.sh

権限付与コマンドを実行する

$ chmod u+x ./*
$ ls -la

-rwxr--r--   1 keisuke  staff  333  9 22 23:10 BBB.sh
-rwxr--r--   1 keisuke  staff  128  9 22 23:14 CCC.sh

おっけ、どうやら大丈夫そうだ。

ではBBB.shコマンドを実行してみる

$ ./BBB.sh

xxx=123 in BBB.sh
yyy=234 in BBB.sh
xxx= in CCC.sh    # BBB.shで定義したxxxはここでは表示されていない
yyy=234 in CCC.sh

実行結果を確認してみるとBBB.sh内で呼び出している./CCC.shではBBB.shで定義したシェル変数であるxxx=123は引き継がれていない

逆にBBB.sh内で設定した環境変数であるyyy=234はCCC.sh内でもしっかりと呼び出されていることがわかる

readコマンド

readコマンドとは、標準入力からデータを読み込むことができる。すでに変数にデータが入っていた場合、新しいデータに上書きできる。

では早速このreadコマンドを使ってみる

$ abc=123
$ echo $abc

> 123

$ read abc

> aaabbbccc

どうやら無事、シェル変数abcの値を123からaaabbbcccに変更できたみたい。

シェル変数の一覧を表示する

シェル変数の一覧を表示する場合はsetコマンドを利用する。

$ set




おわわわ、、、Macにてこのコマンドを実施するとかなりのシェル変数が返ってきてる、、、ので割愛する。



ということで先ほどセットしたabcの部分だけを抽出するコマンドを

$ set | grep ^abc  ## abcで始まるシェル変数のみを確認します

> abc=aaabbbccc

シェル変数abcを削除する

$unset abc
$ set | grep ^abc

>             #abcは削除されているので何も返ってこない

環境変数の一覧を表示する

環境変数の一覧を表示する場合は、envコマンドを利用する。

では早速環境変数を確認してみる

$ env

LDFLAGS=-L/usr/local/opt/openssl/lib
TERM_PROGRAM=Apple_Terminal
SHELL=/bin/bash
TERM=xterm-256color
CPPFLAGS=-I/usr/local/opt/openssl/include
TMPDIR=/var/folders/1v/b0dv4djn5wn5g265ql3r6p600000gn/T/
CONDA_SHLVL=1
Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.RIWFQ9cOiV/Render
CONDA_PROMPT_MODIFIER=(base) 
TERM_PROGRAM_VERSION=421.2
TERM_SESSION_ID=E989F4C8-8A7C-4C3B-8142-24AF8A45DA67
USER=keisuke
CONDA_EXE=/Users/keisuke/anaconda3/bin/conda
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.DME8buVTXr/Listeners
_CE_CONDA=
PATH=/Users/keisuke/anaconda3/bin:/Users/keisuke/anaconda3/condabin:/Users/keisuke/.rbenv/shims:~/.rbenv/shims:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
CONDA_PREFIX=/Users/keisuke/anaconda3
PWD=/Users/keisuke/linux
LANG=ja_JP.UTF-8
XPC_FLAGS=0x0
RBENV_SHELL=bash
_CE_M=
XPC_SERVICE_NAME=0
SHLVL=1
HOME=/Users/keisuke
CONDA_PYTHON_EXE=/Users/keisuke/anaconda3/bin/python
LOGNAME=keisuke
CONDA_DEFAULT_ENV=base
_=/usr/bin/env
OLDPWD=/Users/keisuke

なんかいっぱい設定されている。
ちゃんと、いくつか思い当たるやつもある。

特に、PythonやるためにインストールしたAnacondaとかrubyのバージョン管理のために入れたrbenvとかがっつり環境変数に設定されてる。。

こうやってみるとローカル環境であれもこれもやるのってやっぱり怖いなって思う。
(そう早くDockerに行かなくては)

さてそれでは、ここで環境変数の操作練習のために変数を設定する。

$ export ABC=999999
$ env | grep ^ABC

ABC=99999

よし、環境変数にABC=99999が設定されたようだ。

ではABCを削除する。

$ unset ABC
$ env | grep ^abc

>  #ABCは削除されたので値は返ってこない

さて今回はここまで。
まだまだライトな内容だと思いますが、だんだん難しくなるんだろうな。。

次回も書くと思いますので眺めてみてくださいね。