Linuxを使い始めて、コマンドには少し慣れてきたけれど、シェルスクリプトとなると別の話に感じる方も多いと思います。
でも実は、シェルスクリプトは「コマンドをファイルに書いて実行するだけ」という、ごくシンプルなものです。
プログラミングの知識がなくても、Linuxのコマンドを少し知っていれば、すぐに動かすことができます。
この記事では、シェルスクリプトを一度も書いたことがない初心者の方向けに、作成から実行までの基本手順と、覚えておくだけで便利になる基礎構文を丁寧に解説します。
この記事のポイント
・シェルスクリプトは「コマンドを並べたファイル」で動かすだけでOK
・chmod +x で実行権限を付与し ./スクリプト名.sh で動かせる
・変数・if・for の3つを押さえれば自動化の基礎は完成する
・初心者はまず「バックアップを自動化するスクリプト」から始めると実感しやすい
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
シェルスクリプトとは何か?コマンドをまとめて自動化するファイル
普段ターミナルに入力しているコマンド、たとえばls や cp は、1行ずつ手動で打ち込んでいます。シェルスクリプトとは、こうしたコマンドをファイルに書いておいて、まとめて実行できるようにしたものです。
たとえば毎朝同じフォルダをバックアップしたい、ログファイルを定期的に整理したい、といった繰り返し作業を自動化できます。
Windowsのバッチファイル(.bat)に相当するもの、と考えると近いです。ただしLinuxのシェルスクリプトは機能がはるかに豊富で、実務の自動化の多くがシェルスクリプトで実装されています。
最初のシェルスクリプトを作って動かす
1. ファイルを作成する
まずテキストエディタでシェルスクリプトファイルを作成します。ここではnano を使います。# nanoでファイルを新規作成 nano hello.sh
#!/bin/bash echo "こんにちは、Linuxの世界へようこそ!" echo "今日の日付: $(date)"
#!/bin/bash(シバン行と呼びます)は「このスクリプトをbashで実行してください」という宣言です。これがないと、どのシェルで動かすかが曖昧になるため、必ず最初の行に書く習慣をつけましょう。
nanoを保存して閉じるには
Ctrl+O(保存)→ Enter → Ctrl+X(終了)の順に操作します。2. 実行権限を付与する
作成したファイルをそのまま実行しようとしても、デフォルトでは「実行権限」がないため動きません。以下のコマンドで実行権限を付与します。
# 実行権限を付与 chmod +x hello.sh # 権限を確認(-rwxrwxr-x のように x が付いていればOK) ls -l hello.sh
-rwxrwxr-x 1 tomohiro tomohiro 72 Apr 28 10:00 hello.sh
3. スクリプトを実行する
./ に続けてファイル名を入力して実行します。./hello.sh
こんにちは、Linuxの世界へようこそ! 今日の日付: Mon Apr 28 10:00:15 JST 2026
$(date) の部分は、実行した瞬間の日付・時刻に自動で置き換わります。これを「コマンド置換」と呼びます。シェルスクリプトの基本構文3つ
シェルスクリプトを使いこなすうえで、最低限知っておきたい構文が3つあります。1. 変数:繰り返し使う値を名前で管理する
変数は「名前=値」の形式で定義します。使うときは変数名の前に$ を付けます。#!/bin/bash # 変数を定義 USERNAME="taro" BACKUP_DIR="/home/${USERNAME}/backup" echo "ユーザー名: ${USERNAME}" echo "バックアップ先: ${BACKUP_DIR}"
ユーザー名: taro バックアップ先: /home/taro/backup
${変数名} と書くと、文字列の中に変数を埋め込むときに見やすくなります。2. if文:条件によって処理を変える
「ファイルが存在する場合だけ処理する」「ディレクトリがなければ作成する」といった条件分岐は、if文で実現します。#!/bin/bash TARGET_DIR="/home/tomohiro/backup" # ディレクトリが存在しない場合は作成する if [ ! -d "${TARGET_DIR}" ]; then echo "${TARGET_DIR} が存在しないため作成します" mkdir -p "${TARGET_DIR}" echo "作成完了" else echo "${TARGET_DIR} はすでに存在します" fi
・!(感嘆符):条件を否定する。「存在しない場合」という意味になる
・fi:if文の終わりを示す(ifを逆から読むとfi)
3. for文:同じ処理を繰り返す
複数のファイルに同じ処理を行いたいときに使います。#!/bin/bash # /var/log 内の .log ファイルをひとつずつ確認する for logfile in /var/log/*.log; do echo "ファイル: ${logfile}" echo "サイズ: $(du -sh ${logfile} | cut -f1)" done
ファイル: /var/log/apt/history.log サイズ: 8.0K ファイル: /var/log/auth.log サイズ: 12K ファイル: /var/log/syslog サイズ: 48K
実践:ファイルをバックアップするスクリプトを作る
変数・if・forを組み合わせて、実際に使えるバックアップスクリプトを作ってみましょう。#!/bin/bash # ---- 設定 ---- SOURCE_DIR="/home/tomohiro/documents" BACKUP_BASE="/home/tomohiro/backup" DATE=$(date +%Y%m%d) BACKUP_DIR="${BACKUP_BASE}/${DATE}" # ---- バックアップ先ディレクトリの作成 ---- if [ ! -d "${BACKUP_DIR}" ]; then mkdir -p "${BACKUP_DIR}" echo "バックアップ先を作成しました: ${BACKUP_DIR}" fi # ---- ファイルをコピー ---- for file in "${SOURCE_DIR}"/*; do if [ -f "${file}" ]; then cp "${file}" "${BACKUP_DIR}/" echo "コピー完了: $(basename ${file})" fi done echo "バックアップが完了しました: ${BACKUP_DIR}"
/home/tomohiro/documents/ 内のファイルを日付付きのフォルダにコピーします。毎日実行すれば、自動的に「20260428」「20260429」と日付別のバックアップが作られていきます。
トラブルシュート:よくあるエラーと対処法
「Permission denied」と表示される
実行権限がない状態で実行しようとしたときのエラーです。# エラー例 -bash: ./hello.sh: Permission denied # 対処: 実行権限を付与する chmod +x hello.sh
「/bin/bash^M: bad interpreter」と表示される
Windowsのテキストエディタ(メモ帳等)でファイルを編集したときに発生します。Windowsは行末に「^M(CR)」という文字を付ける仕様があり、Linux側でエラーになります。
# dos2unix コマンドで変換する(インストールが必要な場合あり) dos2unix hello.sh # または sed で CR を削除する sed -i 's/ //' hello.sh
変数が空になってしまう
変数の定義でイコールの前後にスペースを入れると、変数が設定されません。# NG: = の前後にスペースがある USERNAME = "taro" # OK: = の前後にスペースなし USERNAME="taro"
シェルスクリプトをより便利にするTips
set -e でエラー時に自動停止させる
スクリプトの2行目にset -e を書いておくと、コマンドがエラーになった時点でスクリプトが停止します。処理の途中でエラーが起きても気づかないまま次の処理に進んでしまう事故を防げます。
#!/bin/bash set -e # このコマンドがエラーになったら、以降の処理は実行されない cp /存在しないファイル /tmp/ echo "この行は実行されない"
echo でデバッグ情報を表示する
スクリプトが期待通りに動かないときは、変数の中身をecho で確認するのが基本です。# 変数の中身を確認 echo "SOURCE_DIR = ${SOURCE_DIR}" echo "BACKUP_DIR = ${BACKUP_DIR}"
コメントで意図を残す
# で始まる行はコメントとして無視されます。数週間後の自分が読んでも意図がわかるよう、コメントを書く習慣をつけましょう。#!/bin/bash # スクリプト名: backup.sh # 用途: documentsディレクトリを日付別フォルダにバックアップする # 作成日: 2026-04-28 # 実行方法: ./backup.sh
本記事のまとめ
シェルスクリプトの基本をまとめます。| やりたいこと | 方法・コマンド |
|---|---|
| スクリプトファイルを作成する | nano スクリプト名.sh |
| シバン行を書く | #!/bin/bash(必ず1行目) |
| 実行権限を付与する | chmod +x スクリプト名.sh |
| スクリプトを実行する | ./スクリプト名.sh |
| 変数を定義する | 変数名="値"(= の前後にスペースなし) |
| 変数を使う | ${変数名} |
| 条件分岐する | if [ 条件 ]; then ... fi |
| 繰り返し処理する | for 変数 in リスト; do ... done |
| エラー時に自動停止する | set -e(2行目に書く) |
まずは自分のよく使うコマンドをファイルにまとめて実行してみるところから始めましょう。
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
シェルスクリプトをはじめとしたLinuxの実務スキルを体系的に学びたい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>
次に学ぶなら:Linuxスキルアップ記事のご案内
シェルスクリプトの基礎をつかんだら、次はLinuxの各スキルをさらに深めていきましょう。以下の記事が参考になります。
・Linuxコマンドの基礎:ターミナル操作の土台をしっかり固める
・ファイル操作コマンド:cp・mv・rmを使いこなして作業効率を上げる
・ユーザー管理:rootと一般ユーザーの使い分けを理解する
・パーミッション設定:chmodで読み書き実行の権限を管理する
・プロセス管理:バックグラウンド処理とpsコマンドをマスターする
・ネットワーク確認コマンド:ipコマンドとpingで接続状態を確認する
・シェルスクリプト入門:本記事の続きとして、応用的な自動化スクリプトを学ぶ
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Linuxのファイル検索入門|findコマンドで目的のファイルを素早く見つける方法
- 前のページへ:Linuxのログファイル入門|tailとlessでサーバーの状態を読む方法
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます