導入
「バックアップ先のディレクトリ」を10か所に直書きしたスクリプトは、引っ越しのときに10か所直すことになります。1か所でも直し漏れれば壊れます。変数は、この「直し漏れ」を構造的に防ぐ道具です。
説明
変数は 名前=値 で作り、$名前 で取り出します。
#!/bin/bash
# 設定(変えたくなったらここだけ直す)
BACKUP_DIR=/home/user/backup
TARGET=logs/app.log
echo "対象: $TARGET"
echo "保存先: $BACKUP_DIR"
echo "コピー先のフルパス: $BACKUP_DIR/app.log"
シェルの変数には、他の言語にない約束事が3つあります。
=の前後にスペースを入れない。NAME = 値はエラーになります(シェルはNAMEというコマンドを探しに行きます)。- 型がない。数値も文字列も、すべて文字列として持ちます。
- 取り出すときだけ
$を付ける。作るときは付けません。
名前の切れ目をはっきりさせたいときは ${名前} と波括弧で囲みます。直後に文字が続く場面で必須です。
name=report
echo $name.csv
echo ${name}_2026.csv
慣習として、設定用の変数は大文字(BACKUP_DIR)、その場限りの作業変数は小文字(i, line)で書き分けます。読む人が「これは設定だな」と一目で分かるようになります。
export 名前=値とすると 環境変数 になり、そのスクリプトから呼び出した別のコマンドにも渡ります。PATHやHOMEが代表例です。パスワードやAPIキーは、スクリプトに直書きせず環境変数で渡すのが安全な作法です。
やってみよう
上のスクリプトを実行して、変数が展開される様子を見てください。次に BACKUP_DIR の値を /home/user/old-backup に書き換えて、もう一度実行。1か所直すだけで、出力の2か所が同時に変わることを確かめましょう。これが変数の価値です。
演習
スクリプトに USER_NAME=太郎 という変数を作り、echo "ようこそ、$USER_NAME さん" で画面に出してください。
ヒント1を見る
変数は 名前=値。= の前後にスペースは入れません。
ヒント2を見る
USER_NAME=太郎 の次の行に echo "ようこそ、$USER_NAME さん"