はじめに
本記事も前回の記事シェルスクリプトについて part2に続きLinux標準教科書の内容をメモしていきます。
シェル変数と環境変数の動作を確認する
まずはぞれぞれLinux標準教科書の内容に沿って、BBB.sh
とCCC.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は削除されたので値は返ってこない
さて今回はここまで。
まだまだライトな内容だと思いますが、だんだん難しくなるんだろうな。。
次回も書くと思いますので眺めてみてくださいね。