連載
シェルスクリプトに挑戦しよう(4)変数の定義と参照:“応用力”をつけるためのLinux再入門(24)(1/2 ページ)
シェルスクリプトでは、単にコマンドを実行するだけではなく、条件によって処理を変えたり、繰り返し処理を行ったり、また、通常のコマンドのように引数を受け取って、引数に応じた処理を行ったりすることができます。今回は、シェルスクリプトで「変数」を扱う方法について解説します。
変数の定義と参照
「変数」の扱い方はコマンドラインと同じです。シェルスクリプトの中で新しく変数を使いたい場合は、「変数名=値」のように指定します。「=」記号の前後に空白を入れることはできません。
定義した変数の値は「$変数名」で参照できます。既存の環境変数やシェル変数も同じように参照します。
#! /bin/bash STR="abc" echo "$STR"
▲変数を定義して表示する例(vartest)
$ chmod +x vartest $ ./vartest abc ← 変数「STR」の内容が表示された
▲実行結果(vartest)
●コマンドの実行結果を変数に保存する
「変数名=`コマンド`」で、コマンドの実行結果を変数に保存することができます。以下のサンプルスクリプトでは、「date」コマンドを使って、変数「TODAY」に今日の日付を8桁の数字で保存しています。
#! /bin/bash TODAY="`date +%Y%m%d`" echo "$TODAY"
▲dateコマンドの結果を変数「TODAY」に保存する(setTODAY)
$ chmod +x setTODAY $ ./setTODAY 20181003 ← 変数「TODAY」の内容が表示された
▲実行結果(setTODAY)
●スクリプト実行後も変数を使用できるようにする
シェルスクリプトは、「#!」行の指定に従い、bashが別途起動して実行しています。従って、シェルスクリプトの中で定義した変数は、シェルスクリプトの中だけで使用できます。
実行後も参照したい場合は、「source」コマンドを使って、シェルスクリプトを“現在動作している”bashに読み込ませる必要があります。
$ ./setTODAY ← setTODAYを実行する(bashが別途起動して実行している) 20181003 ← 変数「TODAY」の内容が表示された $ echo "$TODAY" ← 変数「TODAY」の内容を確認 ← 何も表示されない
▲スクリプトをそのまま実行した場合
$ source setTODAY ← sourceコマンドで現在のシェルにsetTODAYを読み込ませる 20181003 ← 変数TODAYの内容が表示された $ echo "$TODAY" ← 変数TODAYの内容を確認 20181003 ← 変数TODAYの内容が表示された
▲sourceコマンドでスクリプトを実行した場合
なお、「変数名=値」でセットした変数は、シェル変数となります。シェル以外からも参照したい場合は、「export」コマンドで環境変数にします。exportする場合も、シェルスクリプト終了後も使用するにはsourceコマンドによる操作が必要です。
Copyright © ITmedia, Inc. All Rights Reserved.