今回は
「シェル変数(shell variable)」を学ぼう
データの「入れ物」みたいなものなんだ
以降、単に「変数(variable)」と呼ぶよ
データの入れ物?
どうやって
使うのかな?
まずは変数の定義からだよ
以下のようにして定義するんだ
変数名=値
ただし
=
の両脇にはスペースを入れないでね定義は簡単だね迷うことはなさそう!
では実際に試してみよう
TIMER
という変数にタイマーの秒数を保持させよう30秒タイマーにしたければ以下のようにするよ
TIMER=30
わかった!
…打ち込んだけど特に何も起こらないね
変数を設定しても何も表示されないんだだけどシェルは変数の値を覚えてくれているよ
今度は変数の値を呼び出してみよう以下のように記述するよ
$変数名
これで変数の値を取り出せるのね!
それを確かめるために以下のコマンドを打ち込んでみよう
sleep $TIMER; tput bel
;
)」そして 「ベルを鳴らす」だね
tput bel
はTIMER
変数に入っていた 30
が使われてsleep 30
を実行してくれるんだね30秒待った後にベルが鳴る…確かに30秒タイマーとして機能するね!
じゃあ今度は
TIMER
変数の値を変えてみよう3分タイマーにしたければ以下のようにしてみてねTIMER=180
3分は180秒というわけだね設定したよ!
そうしたら同じコマンドを再び実行してみよう
sleep $TIMER; tput bel
本当だ!3分待機してからベルが鳴った!
実行するコマンドは同じなのに
TIMER
変数の値を変えるだけで動きが変わるんだね変数を使うと「変化する値」を 簡単に操作できるようになるんだ
シェルには初めから用意されている変数もあるんだいくつか重要なものを紹介するね
変数名 | 変数の値 |
---|---|
PATH | コマンドを探すディレクトリのパス。 |
HOME | ユーザのホームディレクトリのパス |
PWD | ワーキングディレクトリのパス |
USER | 現在ログインしているユーザ名 |
SHELL | 現在使っているシェルの実行ファイルのパス |
IFS | シェルが区切り文字として使う文字 |
こういう変数は勝手に定義されるんだね!
自分で宣言する変数の変数名に使える文字には制限があるよ英大文字小文字数字とアンダースコア(
_
)が使えるんだただし1文字目には英数字は使えないよ制限はあるけど自由な名前をつけるには十分そうだね
これは変数の値を文字の中に埋め込みたい場合に困る場合があるんだ
へぇ…どういう場合かな?
例えば
ユーザ名_id_rsa
というファイル名を扱いたい場合はどうすればいいと思う?こうすればいいんじゃないのかな?
$USER_id_rsa
実はこの指定だと意図どおりに動かないんだ
$
以降が全て変数で使える文字なのでこれは USER_id_rsa
変数だと判断されるよなるほど…それは困っちゃうね
それを避けるために以下のような記述でも変数を呼び出せるんだ
${変数名}
さっきの例だと以下のようにすれば意図どおりに動くよ
${USER}_id_rsa
普段はそのままでいいけど変数名の区切りで困ることがあれば
${変数名}
とすればいいのね!今回は「シェル変数」と その使い方について学んだよ!
シェル変数を使うことでコマンドを柔軟にしたり抽象的に扱えたりするんだ高度な操作に必要な機能なので使えるようにしておこう!