シェルスクリプト入門 – 現場で使える実践付きの完全版

LinuxやUnixの環境で作業を効率化する上で欠かせないのが「シェルスクリプト」です。日々の業務で繰り返し行うコマンド操作やファイル処理を、自動化してくれる強力なツールとして多くの現場で使われています。

しかし、シェルスクリプトは「なんとなく書いて動かす」だけでは、思わぬエラーやメンテナンス性の低さにつながることもあります。そこで本記事では、シェルスクリプトの基本文法から、実務で役立つ具体的なスクリプト例まで、体系的かつ実践的に学べる完全版ガイドとしてまとめました。

  • これからシェルスクリプトを学びたい初心者の方
  • 過去に触ったことはあるけど理解が曖昧な方
  • 実務で使える具体例やミスの防ぎ方を知りたい方

そんな方に向けて、「動かすだけでなく理解して書ける」スクリプト力を身につけていただける内容になっています。ぜひ、コピー&ペーストだけで終わらせない実践力をこの1記事で身につけていきましょう。

  1. シェルスクリプトとは?
    1. シェルスクリプトの定義(Bashを中心に)
    2. CLIとシェルスクリプトの違い・メリット
    3. なぜ今でも使われるのか(高速・軽量・柔軟)
  2. はじめてのシェルスクリプト
    1. shebang(シバン)とは:#!/bin/bash
      1. 例:
    2. ファイル作成・実行手順
    3. 実行権限と chmod
      1. 実行権限に関する補足:
  3. 変数と文字列
    1. 🔹 変数の定義と展開
      1. 定義(代入)
      2. 展開(参照)
    2. 🔹 クォートの違い
      1. ✅ 推奨:変数展開は "${変数}" の形式で
    3. 🔹 パラメータ展開の応用
      1. 応用例:デフォルト値を使う
  4. 条件分岐とループ
    1. 🔹 if文の使い方
      1. 基本構文
      2. 使用例
      3. よく使う比較演算子
    2. 🔹 for / while / until ループ
      1. for ループ
      2. while ループ
      3. until ループ
    3. 🔹 case文による分岐
      1. 基本構文
      2. 使用例
    4. ✅ まとめ
  5. よく使う構文まとめ
    1. 🔹 関数定義
      1. 基本構文
      2. 使用例
    2. 🔹 配列
      1. 定義と参照
      2. 使用例
      3. 要素数の取得
    3. 🔹 コマンド置換
      1. 書き方
      2. 使用例
    4. 🔹 算術演算子(整数計算)
      1. 使用例
      2. 主な演算子一覧
    5. ✅ まとめ
  6. 現場で使えるスクリプト例
    1. 🔹 バックアップ自動化スクリプト
    2. 🔹 ログ解析スクリプト(エラーカウント)
    3. 🔹 サーバーステータスチェック(ping)
    4. 🔹 定期実行(cron対応)
      1. ステップ1:スクリプトを作成して実行確認
      2. ステップ2:crontab -e で登録
    5. ✅ まとめ:実務に役立つスクリプトをすぐ導入
  7. よくあるエラーと対処法
    1. 🔹 スペースの扱い
      1. ❌ よくある間違い
      2. ✅ 正しい書き方
      3. 引数・文字列にも注意
    2. 🔹 exitコードの確認と使い方
      1. 使い方の例
    3. 🔹 set -e / set -u の活用
      1. set -e(エラー時に即終了)
      2. set -u(未定義変数の使用でエラー)
      3. 組み合わせ例
    4. ✅ まとめ:防げるエラーは防ごう
  8. Tips・補足情報
    1. 🔹 POSIXとBashの違い
      1. POSIXとは?
      2. BashはPOSIX準拠+拡張
    2. 🔹 Windowsとの違い
      1. WSLの活用(Windows Subsystem for Linux)
    3. 🔹 シェルスクリプトとセキュリティ
      1. 危険:未エスケープの外部入力
      2. 対策:
      3. 例:安全なファイル削除処理
    4. ✅ まとめ:一歩先へ進むための知識
  9. 練習用の問題集(初級〜中級)
    1. 🔰 初級編
      1. ✅ Q1. 名前を聞いて挨拶するスクリプト
      2. ✅ Q2. ファイルの存在を判定するスクリプト
      3. ✅ Q3. 数字を1〜5まで表示するスクリプト
    2. ⚙️ 中級編
      1. ✅ Q4. 今日のエラー件数をログから抽出するスクリプト
      2. ✅ Q5. コマンド引数に応じた処理を行うスクリプト
      3. ✅ Q6. .txt → .bak にファイル名を変更するスクリプト
    3. ✍️ おすすめの学習法
  10. よくある質問(FAQ)
    1. ❓ シェルスクリプトはプログラミング言語ですか?
    2. ❓ OSとシェルの違いは何ですか?
    3. ❓ シェルスクリプトとシェルとは何が違うの?
    4. ❓ シェルとコマンドプロンプトの違いは何ですか?
  11. 🔗 参考リンク・学習リソース集
    1. 📘 基礎から学べる公式&百科事典的リソース
    2. 🧰 実践に役立つ外部コンテンツ
    3. 🏡 当サイト(bashdo.com)のおすすめ記事
    4. 📌 おすすめの活用法
  12. 🧾 まとめ:シェルスクリプトを、現場の力に
    1. 学びを「行動」に変えたい方へ
  13. 執筆者
  14. 関連記事

シェルスクリプトとは?

シェルスクリプトの定義(Bashを中心に)

シェルスクリプトとは、シェル(Shell)と呼ばれるコマンドラインインターフェース上で実行される複数のコマンドを、1つのファイルにまとめたスクリプト(自動処理プログラム)です。

特に多くの環境で使われているのが Bash(Bourne Again Shell) で、LinuxやmacOSでは標準的に採用されています。

そのため、本記事ではBashをまとめたシェルスクリプトを中心に解説していきます。

#!/bin/bash

echo "こんにちは、シェルスクリプトの世界へようこそ!"

このように、シェルスクリプトは .sh ファイルとして保存し、1つのまとまりとしてコマンドを順番に実行させることができます。

シェルスクリプトで使われるBashについて、より入門的な情報を求めている方はこちらの記事が参考になります → Bash

CLIとシェルスクリプトの違い・メリット

日常的なCLI(コマンドライン)の操作では、毎回手動でコマンドを打ち込みます。一方で、シェルスクリプトはその操作を自動化・再利用可能にする手段です。

比較項目CLI操作シェルスクリプト
実行方法手動入力自動実行(スクリプト化)
保守性一時的記録・再実行しやすい
人的ミス入力ミスのリスクあり再現性が高く、ミスを防げる
応用力単発処理向き条件分岐・ループ・関数による複雑処理も可能

複数の作業を一括で処理したい場合や、定期実行のタスクを組みたい場合は、CLIよりもシェルスクリプトのほうが圧倒的に効率的です。

なぜ今でも使われるのか(高速・軽量・柔軟)

シェルスクリプトは、PythonやGo、Rustといった新しい言語の登場後も、以下の理由から今でも多くの現場で重宝されています。

  • 高速起動:インタプリタ型で即時に処理を実行
  • 軽量:外部ライブラリが不要で、どのLinux環境でも動作
  • 柔軟性:コマンドやプロセス、ファイル操作と自然に連携できる
  • 相互運用性:cronやsystemd、CI/CDパイプラインなど、他のシステムとの親和性が高い

とくに「ちょっとした作業をすばやく自動化したいとき」には、最適な選択肢となります。

はじめてのシェルスクリプト

シェルスクリプトの魅力は、テキストファイル1つで簡単に自動処理ができることにあります。ここでは、最初のスクリプトを実際に作成し、実行するまでの基本的な手順を紹介します。

shebang(シバン)とは:#!/bin/bash

シェルスクリプトの最初の行には、以下のような1行を記述します。

#!/bin/bash

これを shebang(シバン) と呼び、スクリプトをどのシェルで実行するかを指定するものです。

例:

#!/bin/bash
echo "こんにちは、シェルスクリプト!"

この行を省略すると、実行環境の設定に依存して想定外の挙動をすることがあります。明示的にbashを指定するのが安心です。

ファイル作成・実行手順

  1. テキストエディタでファイルを作成
    任意の名前で .sh 拡張子をつけるのが一般的です(必須ではありません)。
nano hello.sh
  1. 内容を記述する
#!/bin/bash
echo "Hello, Shell Script!"
  1. 保存して閉じる(Nanoなら Ctrl + OEnterCtrl + X
  2. 実行権限を付与
chmod +x hello.sh
  1. スクリプトを実行
./hello.sh

実行権限と chmod

作成した .sh ファイルは、デフォルトでは実行権限が付いていないことが多いです。実行可能にするには chmod コマンドを使います。

chmod +x ファイル名.sh

実行権限に関する補足:

コマンド例意味
chmod +x script.sh実行権限を追加(ユーザーに)
ls -l script.sh現在の権限を確認
chmod 755 script.shユーザーに読み書き実行、他に読み実行を許可

変数と文字列

シェルスクリプトでは、変数と文字列の扱い方を理解することで、より柔軟で再利用性の高いスクリプトが書けるようになります。このセクションでは、変数の基本的な定義から、クォートの使い分け、パラメータ展開の応用までを丁寧に解説します。

🔹 変数の定義と展開

定義(代入)

name="太郎"
  • =の前後にスペースを入れてはいけません(構文エラーになります)
  • 数字や文字列はそのまま代入できます(型の指定は不要)

展開(参照)

echo "$name"     # → 太郎
echo "${name}"   # → 太郎({}で囲うのは補完ミスを防ぐために推奨)
  • $変数名 または ${変数名} の形で変数を展開します
  • ${}を使うことで、後続の文字と区別がつきやすくなります

🔹 クォートの違い

変数を使うとき、クォート(引用符)をどう使うかで結果が変わることがあります。違いを理解しておくことはとても重要です。

クォート意味使用例
ダブルクォート "変数やコマンドの展開を行うecho "名前は$nameです"
シングルクォート '中身をそのまま表示(展開しない)echo '名前は$nameです'$nameと出力
クォートなし展開されるが、スペースに注意echo $name(値にスペースがあるとバグの原因に)

✅ 推奨:変数展開は "${変数}" の形式で

これはスペースや特殊文字によるバグを防ぐためです。

file="my file.txt"
echo "$file"     # OK("my file.txt")
echo $file       # NG(my と file.txt に分解される)

🔹 パラメータ展開の応用

パラメータ展開を使うと、変数に値がない場合のフォールバック処理などが可能になります。

構文説明
${var:-default}変数が未設定 or 空ならdefaultを使うecho "${name:-ゲスト}"
${var:=default}未設定ならdefaultを代入して使うecho "${user:=anonymous}"
${#var}変数の長さ(文字数)を取得echo "${#name}"
${var%pattern}後方一致する部分を削除filename="report.txt"; echo "${filename%.txt}"
${var#pattern}前方一致する部分を削除path="/home/user/file"; echo "${path#/home/}"

応用例:デフォルト値を使う

greeting="${GREETING:-こんにちは}"
echo "$greeting"   # GREETINGが未設定なら「こんにちは」と表示

条件分岐とループ

シェルスクリプトの力を引き出すうえで欠かせないのが、条件分岐とループ処理です。ファイルの存在確認や繰り返し処理など、あらゆる自動化に活用されます。

このセクションでは、実用頻度の高い構文を中心にわかりやすく解説します。

🔹 if文の使い方

if文は、条件に応じて処理を分けるための基本構文です。

基本構文

if [ 条件 ]; then
  コマンド
elif [ 条件 ]; then
  コマンド
else
  コマンド
fi

使用例

num=5

if [ "$num" -gt 10 ]; then
  echo "10より大きい"
elif [ "$num" -eq 10 ]; then
  echo "10と等しい"
else
  echo "10より小さい"
fi

よく使う比較演算子

演算子説明
-eq等しい(整数)
-ne等しくない
-gtより大きい
-ltより小さい
-ge以上
-le以下
-z空文字列
-n非空文字列
-f ファイルファイルが存在
-d ディレクトリディレクトリが存在

文字列比較では = を使います(数値とは異なります):

if [ "$name" = "taro" ]; then
  echo "名前はtaroです"
fi

🔹 for / while / until ループ

for ループ

for i in 1 2 3; do
  echo "カウント: $i"
done

✅ 拡張例:ファイル一覧を処理

for file in *.txt; do
  echo "$file を処理中"
done

while ループ

条件が真である限り繰り返します。

count=1
while [ "$count" -le 3 ]; do
  echo "回数: $count"
  count=$((count + 1))
done

until ループ

条件が偽である限り繰り返します。

count=1
until [ "$count" -gt 3 ]; do
  echo "Until回数: $count"
  count=$((count + 1))
done

🔹 case文による分岐

複数の選択肢に対して処理を分けたいときに便利なのが case 文です。

基本構文

case $変数 in
  パターン1)
    コマンド
    ;;
  パターン2)
    コマンド
    ;;
  *)
    デフォルトの処理
    ;;
esac

使用例

day="金曜日"

case "$day" in
  月曜日)
    echo "週の始まりです"
    ;;
  金曜日)
    echo "明日は土曜日!"
    ;;
  *)
    echo "平日です"
    ;;
esac

✅ まとめ

処理目的使用例
if条件によって処理を切り替える数値比較、ファイルチェックなど
forリスト・範囲の繰り返し処理ファイルの一括処理など
while条件が成り立つ限り処理カウンタ処理など
until条件が成り立たない間処理終了条件が明確なループ
case複数の値に応じて分岐メニュー選択や曜日処理など

よく使う構文まとめ

シェルスクリプトでは、繰り返し使う処理を関数にまとめたり、複数の値を配列で扱ったり、コマンドの出力を変数に代入したりすることができます。ここでは、実務でも頻出する関数・配列・コマンド置換・演算子の使い方をまとめます。

🔹 関数定義

関数を使うことで、スクリプト内の処理を整理し、再利用性を高めることができます。

基本構文

関数名() {
  コマンド
}

または

function 関数名 {
  コマンド
}

使用例

greet() {
  echo "こんにちは、$1 さん"
}

greet "太郎"
# → こんにちは、太郎 さん
  • $1, $2 は関数に渡された引数
  • return で終了コードを返すことも可能(例:return 0

🔹 配列

複数の値をまとめて管理したいときに便利なのが配列です。

定義と参照

fruits=("apple" "banana" "cherry")
  • 要素の参照:${fruits[0]}, ${fruits[1]} など
  • 全要素の参照:${fruits[@]} または ${fruits[*]}

使用例

for fruit in "${fruits[@]}"; do
  echo "フルーツ: $fruit"
done

要素数の取得

echo "要素数: ${#fruits[@]}"

🔹 コマンド置換

コマンドの実行結果を変数に代入したり、文字列に組み込んだりしたいときに使うのがコマンド置換です。

書き方

result=$(コマンド)

または(古い形式)

result=`コマンド`

✅ 推奨は $() 形式(入れ子に強く可読性が高い)

使用例

now=$(date +%Y-%m-%d)
echo "今日の日付は $now です"

🔹 算術演算子(整数計算)

シェルスクリプトでは、整数の加減乗除を行うために、$(( )) を使います。

使用例

a=10
b=3
sum=$((a + b))
echo "合計は $sum"

主な演算子一覧

記号意味
+加算
-減算
*乗算
/除算(整数)
%剰余

✅ 実数の計算は bc コマンドなどの外部ツールを使用します。

echo "3.5 / 2" | bc

✅ まとめ

構文主な用途備考
関数処理の再利用・整理$1, $2 で引数を取得
配列複数の値の扱い"${array[@]}" で全体を扱う
コマンド置換コマンド出力を変数に格納$() 推奨
算術演算整数の加算・比較など$(( )) で計算可能

現場で使えるスクリプト例

ここでは、実務でよく使われるシェルスクリプトの実用例を紹介します。単なる構文ではなく、「日々の業務で役立つ」ことを意識してまとめました。各例はそのままコピペして試せる形式になっています。

🔹 バックアップ自動化スクリプト

特定のディレクトリを日付付きでバックアップする基本的なスクリプトです。

#!/bin/bash

src_dir="/var/www/html"
backup_dir="/backup"
today=$(date +%Y%m%d)

mkdir -p "$backup_dir"
tar czf "$backup_dir/backup_$today.tar.gz" "$src_dir"

echo "バックアップ完了: $backup_dir/backup_$today.tar.gz"

ポイント

  • tar で圧縮
  • date コマンドでファイル名に日付を付加
  • ディレクトリがなければ自動作成(mkdir -p

🔹 ログ解析スクリプト(エラーカウント)

Apacheなどのログファイルから、error を含む行を抽出して件数を数えるスクリプトです。

#!/bin/bash

logfile="/var/log/apache2/error.log"

count=$(grep -i "error" "$logfile" | wc -l)
echo "エラー行数: $count"

ポイント

  • grep -i:大文字・小文字を区別しない
  • wc -l:行数カウント
  • 応用で日時フィルタや通知も可能

🔹 サーバーステータスチェック(ping)

指定したホストに対して ping を送り、到達可能かを確認します。

#!/bin/bash

host="google.com"

if ping -c 1 "$host" &> /dev/null; then
  echo "$host に接続成功"
else
  echo "$host に接続できません"
fi

ポイント

  • -c 1:1回だけ ping
  • &> /dev/null:出力を抑制
  • 応用でメール通知・Slack通知も可能

🔹 定期実行(cron対応)

スクリプトを定期的に実行したいときは、cron を使います。以下の手順で登録します。

ステップ1:スクリプトを作成して実行確認

#!/bin/bash
echo "$(date): バッチ処理実行中" >> /var/log/myjob.log

ステップ2:crontab -e で登録

0 3 * * * /path/to/script.sh

これは毎日3時に実行される設定です。

項目説明
03

注意点

  • フルパスで指定する
  • 実行権限を忘れずに(chmod +x

✅ まとめ:実務に役立つスクリプトをすぐ導入

用途スクリプト例応用先
バックアップtar + dateWebサーバやDB
ログ解析grep + wc障害対応や運用監視
死活監視ping 判定通信確認・通知連携
定期処理cron連携バッチ処理、掃除スクリプトなど

よくあるエラーと対処法

シェルスクリプトはシンプルな文法で書ける一方、小さなミスが予期せぬバグや挙動につながりやすい一面もあります。
このセクションでは、特に初心者がつまずきやすいポイントを厳選して、原因と対処法を具体的に解説します。

🔹 スペースの扱い

❌ よくある間違い

name = "taro"   # スペースを入れるとエラー!

✅ 正しい書き方

name="taro"
  • 変数の代入では、= の前後にスペースを入れてはいけません
  • スペースがあると、Bash は name をコマンドと認識しようとしてしまいます

引数・文字列にも注意

file="my file.txt"
echo $file       # → `my` と `file.txt` に分かれてしまう
echo "$file"     # → OK: `"my file.txt"`

変数は常にダブルクォートで囲うのが安全

🔹 exitコードの確認と使い方

Bash では直前に実行したコマンドの終了ステータス(exitコード)を $? で取得できます。

使い方の例

cp source.txt dest.txt

if [ $? -ne 0 ]; then
  echo "コピー失敗"
  exit 1
fi
  • 成功:0
  • 失敗:0 以外(1、2など)

✅ エラーハンドリングの判断基準として活用されます

🔹 set -e / set -u の活用

シェルスクリプトには、ミスを未然に防ぐためのオプションがあります。これらを最初に設定するだけで、予期しない動作を避けやすくなります。

set -e(エラー時に即終了)

set -e
  • エラーが発生したらその場でスクリプトを終了
  • 重要な処理の後に次を実行してしまう事故を防げる

set -u(未定義変数の使用でエラー)

set -u
  • 未定義の変数を参照すると即エラーで停止
  • タイプミスや未初期化のバグを防げる

組み合わせ例

#!/bin/bash
set -eu

# スクリプト本文

set -euo pipefail のように拡張することも可能(pipefailはパイプ処理のエラー検知)

✅ まとめ:防げるエラーは防ごう

問題原因対策
変数代入のエラー= の前後のスペーススペースなしで記述
文字列分割クォートなしで展開"$変数" で囲む
コマンド失敗を見落とすexitコード の確認不足$?set -e を使う
変数名のミス未定義変数でも実行されるset -u で検出

Tips・補足情報

このセクションでは、シェルスクリプトをより深く理解するために知っておきたい知識を補足的に紹介します。
スクリプトの移植性、開発環境の違い、セキュリティ面など、実務に役立つ前提知識としておさえておきましょう。

🔹 POSIXとBashの違い

POSIXとは?

POSIX(Portable Operating System Interface)は、UNIX系システムの互換性を保つための仕様です。
「POSIXに準拠したシェルスクリプト」は、多くの環境で同じように動作する汎用スクリプトを意味します。

BashはPOSIX準拠+拡張

Bash(Bourne Again Shell)は、POSIXの仕様に加えて**独自の便利な機能(拡張)**を多く備えています。

機能POSIX対応Bash専用
if, while, case
配列 (array[0])
[[ ]](高度な条件分岐)
** での再帰ワイルドカード

スクリプトを他環境で使う可能性がある場合は、POSIX準拠を意識するとよいです。
逆に、自分のローカル環境(例:UbuntuやmacOS)だけで動かすなら Bash専用機能を積極的に使っても問題ありません。

🔹 Windowsとの違い

Windowsにもコマンドプロンプト(cmd.exe)やPowerShellがありますが、Bashとは設計思想も構文も大きく異なります

項目Bash(Linux/macOS)Windows(cmd / PowerShell)
標準シェル/bin/bashcmd.exe / powershell.exe
改行コードLF (\n)CRLF (\r\n)
パスの区切り/home/user/C:\Users\user\
スクリプト拡張子.sh.bat, .ps1

WSLの活用(Windows Subsystem for Linux)

Windows 10以降では、**WSL(Linux互換レイヤー)**を使うことで Bash を直接実行できます。

wsl bash script.sh

✅ WindowsでBashを使うなら WSL の導入が最も現実的です。

🔹 シェルスクリプトとセキュリティ

シェルスクリプトには、実行権限と文字列展開の注意点が多数存在します。
悪意のある入力やコマンドの誤実行を防ぐためにも、次のような対策を意識しましょう。

危険:未エスケープの外部入力

filename="$1"
rm "$filename"

$1*; rm -rf / などを入力された場合、意図しない動作につながる危険性があります。

対策:

  • 外部からの入力は検証制限する(ホワイトリスト方式)
  • "${変数}" で囲って展開ミスを防ぐ
  • set -euo pipefail で事故を早期検出
  • 不要なファイル削除などは**echoで確認してから実行**

例:安全なファイル削除処理

filename="$1"

if [[ "$filename" =~ ^[a-zA-Z0-9._-]+$ ]]; then
  rm -- "$filename"
else
  echo "不正なファイル名です"
fi

✅ まとめ:一歩先へ進むための知識

テーマポイント
POSIXとBashPOSIX準拠は移植性◎、Bashは機能◎
Windowsとの違い改行・パス・環境が異なる。WSL活用が現実的
セキュリティ外部入力の検証、展開ミス防止、setオプションの活用

練習用の問題集(初級〜中級)

ここでは、これまで学んできた内容を実際に試せる実践問題とその解答例を紹介します。
「次の動作をするスクリプトを作ろう」という形式で、手を動かしながら理解を深めましょう。

🔰 初級編

✅ Q1. 名前を聞いて挨拶するスクリプト

要件

  • 名前を入力で受け取り、「こんにちは、〇〇さん」と出力
#!/bin/bash

read -p "お名前を入力してください: " name
echo "こんにちは、${name}さん"

✅ Q2. ファイルの存在を判定するスクリプト

要件

  • $1 に渡されたファイルが存在するか確認し、結果を出力
#!/bin/bash

if [ -f "$1" ]; then
  echo "ファイルがあります"
else
  echo "ファイルが見つかりません"
fi

✅ Q3. 数字を1〜5まで表示するスクリプト

要件

  • for 文を使って1〜5を順番に出力
#!/bin/bash

for i in {1..5}; do
  echo "カウント: $i"
done

⚙️ 中級編

✅ Q4. 今日のエラー件数をログから抽出するスクリプト

要件

  • 今日の日付+error を含む行を数える
#!/bin/bash

logfile="/var/log/syslog"
today=$(date "+%b %e")  # 例: "Jul 16"

count=$(grep "$today" "$logfile" | grep -i "error" | wc -l)
echo "今日のエラー件数: $count"

✅ Q5. コマンド引数に応じた処理を行うスクリプト

要件

  • $1 に応じて start / stop / status を分岐表示
#!/bin/bash

case "$1" in
  start)
    echo "サービスを開始します"
    ;;
  stop)
    echo "サービスを停止します"
    ;;
  status)
    echo "サービスは稼働中です"
    ;;
  *)
    echo "不明なコマンドです(start / stop / status を指定してください)"
    ;;
esac

✅ Q6. .txt → .bak にファイル名を変更するスクリプト

要件

  • カレントディレクトリの .txt ファイルすべてを .bak に変更
#!/bin/bash

for file in *.txt; do
  if [ -f "$file" ]; then
    mv "$file" "${file%.txt}.bak"
    echo "リネーム: $file → ${file%.txt}.bak"
  fi
done

✍️ おすすめの学習法

  • 各スクリプトを手書きで写してみる
  • ファイル名や引数を変えて応用してみる
  • 条件や構文を一部書き換えて動作確認する

よくある質問(FAQ)

❓ シェルスクリプトはプログラミング言語ですか?

はい、広い意味ではプログラミング言語の一種です。

シェルスクリプトは、「シェル(Bashなど)に実行させる命令を記述したスクリプト言語」です。構文はシンプルで、主にシステム操作やファイル処理、自動化タスクに適しています。

ただし、C言語やPythonのように汎用的なアプリケーションを構築する言語とは目的が異なり、「OS操作を効率よく制御するための言語」として使われます。

❓ OSとシェルの違いは何ですか?

項目OS(オペレーティングシステム)シェル
役割ハードウェアとアプリの仲介、全体の制御ユーザーとOSの橋渡し(操作窓口)
Linux、Windows、macOSBash、Zsh、cmd.exe、PowerShell
イメージ土台そのものOS上に用意された案内人

OSはシステムの本体、シェルはそれを操作するためのインターフェースだと考えるとわかりやすいです。

❓ シェルスクリプトとシェルとは何が違うの?

  • シェルはコマンドを打ち込んで直接操作する**「対話的な環境(インタプリタ)」**
  • シェルスクリプトは、その操作をあらかじめファイルにまとめて自動実行できるようにしたもの

例えるなら:

シェル → 手で操作するリモコン
シェルスクリプト → 自動操作プログラムが組まれたタイマー付きの家電制御

同じコマンドを使っていても、操作方法と自動化の目的で使い分けられます。

❓ シェルとコマンドプロンプトの違いは何ですか?

項目シェル(Bashなど)コマンドプロンプト(Windows)
OS環境Unix/Linux/macOSWindows
拡張性高い(関数、配列、条件分岐など)基本的なコマンド中心
自動化.sh スクリプトで高機能に可能.bat スクリプトで制限あり
代替手段Bash, Zsh, Fish など多種PowerShell(より高度)

Bashなどのシェルは、開発・サーバー運用・自動化に強く、Unix系の世界標準として使われています。

🔗 参考リンク・学習リソース集

📘 基礎から学べる公式&百科事典的リソース

🧰 実践に役立つ外部コンテンツ

🏡 当サイト(bashdo.com)のおすすめ記事

📌 おすすめの活用法

  • ブックマークしておくと、スクリプトで困ったときにすぐ参照できます
  • 当サイト内記事は、実例を中心に構成しているので「使いながら学ぶ」のに最適です

🧾 まとめ:シェルスクリプトを、現場の力に

ここまで、シェルスクリプトの基本構文から実用例、よくあるエラーや活用Tips、さらには練習問題まで、体系的に学んできました。

シェルスクリプトは派手な技術ではありませんが、日々の作業を効率化し、ヒューマンエラーを防ぎ、時間を生み出すための堅実な力を持っています。

とくに以下のような方には、今後もスクリプトを使いこなすことで確実に業務効率が向上するはずです:

  • 同じ操作を何度も繰り返している人
  • サーバー保守や定期作業が多い技術者
  • インフラやログのチェックを自動化したい運用担当者

最初はエラーに悩んだり、「これって合ってるのかな?」と不安になることもあるかもしれませんが、一度書いて、動かしてみることが最大の近道です。

次のステップへ

  • 自分の業務に合わせたスクリプトを書いてみる
  • cron で定期実行に挑戦してみる
  • 複雑な処理は関数化して整理する
  • 安全なスクリプト設計を意識して、set -eu を活用する

もしわからないことがあれば、当サイト bashdo.com にてさらに詳しく解説した記事をご用意しています。
今後も、実務に根ざしたスクリプト情報を更新していきますので、ぜひご活用ください。

執筆者

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
– シンプルなコードを書くこと
– コマンドラインを快適にカスタマイズすること
– 自動化で時間を生み出すこと

# このサイトを読んでほしい人
– Bashに興味があるけど、何から始めればいいかわからない人
– 定型業務を自動化したい人
– 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

学びを“実務”へつなぐ最短ルート

独学で積み上げた「わかった」を、仕事で使える「できる」へ。
学習ハブの内容を踏まえて、実務に直結する学習設計・添削・質問環境を整えたい人は、下記のページで具体的な進め方を確認してください。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする