シェルスクリプト

変数・引用・終了ステータス

値を保存して再利用し、空白や失敗を意識したスクリプトを書きます。

シェルスクリプト入門の講座一覧

01

変数へ値を代入する

変数名は英字、数字、アンダースコアを使い、代入時の左辺に$を付けません。参照するときに$nameと書きます。

変数の基本BASH
name='Mity'
count=3
count=$((count + 2))
printf '%sさんの回数: %s\n' "$name" "$count"
実行結果OUTPUT
Mityさんの回数: 5

数値計算には$((...))を使います。count = 3のように=の周りへ空白を入れると、代入ではなくコマンドとして解釈されるので注意します。

02

引用符で値を守る

ダブルクォートの中では変数が展開され、シングルクォートの中では展開されません。パスやユーザー入力の変数は、原則ダブルクォートで囲みます。

空白を含むパスBASH
file='daily report.txt'
printf 'ファイル名: %s\n' "$file"
touch "$file"
ls -l "$file"
表示例OUTPUT
ファイル名: daily report.txt
-rw-r--r-- 1 mity mity 0 ... daily report.txt

ls $fileと書くと空白で2つの引数に分かれ、意図と違う結果になります。引用符を付けることは、シェルスクリプトの基本的な安全策です。

03

コマンド置換

コマンドの実行結果を変数へ入れるには$(...)を使います。結果の前後にある改行は扱いが変わるため、表示や比較では内容を確認します。

日付とファイル数BASH
today=$(date '+%Y-%m-%d')
file_count=$(find . -maxdepth 1 -type f | wc -l)
printf '%s のファイル数: %s\n' "$today" "$file_count"
実行結果の例OUTPUT
2026-10-09 のファイル数: 3

日付やファイル数は実行環境によって変わります。サンプルと数字が違っても、計算の意味が合っているかを確認します。

04

readで入力を受け取る

readは、利用者の入力を変数へ保存します。入力を表示するときは、入力値をそのままコマンドとして実行しないようにします。

名前を受け取るBASH
read -r -p '名前を入力してください: ' name
printf 'こんにちは、%sさん。\n' "$name"
実行例OUTPUT
名前を入力してください: Mity
こんにちは、Mityさん。

-rはバックスラッシュを特別扱いしない指定です。パスワードなどの入力を画面へ表示したくない場合はread -r -sを使います。

05

終了ステータスを調べる

コマンドは終了時に数値を返し、成功は通常0、失敗は0以外です。直前の結果は$?で調べられます。

成功と失敗COMMAND
true
echo "$?"
false
echo "$?"
実行結果OUTPUT
0
1

実際には終了ステータスを直接保存するより、if command; then ... else ... fiの形で使うほうが読みやすくなります。

ファイルを確認するBASH
printf 'apple\n' > fruits.txt
if [[ -r 'fruits.txt' ]]; then
    printf '読み込み可能です。\n'
else
    printf '読み込めません。\n' >&2
fi
実行結果OUTPUT
読み込み可能です。
06

練習:入力を安全に表示する

名前と年齢を受け取り、次の形式で表示するスクリプトを作ってください。名前に空白が含まれても一つの値として扱います。

期待する実行例OUTPUT
名前を入力してください: 山田 太郎
年齢を入力してください: 20
山田 太郎さんは20歳です。
解答例BASH
read -r -p '名前を入力してください: ' name
read -r -p '年齢を入力してください: ' age
printf '%sさんは%s歳です。\n' "$name" "$age"
実行結果OUTPUT
山田 太郎さんは20歳です。

次は条件分岐と繰り返しへ進み、入力値によって処理を切り替えます。