Linuxシェルスクリプト入門|初心者でも動かせる自動化の第一歩

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)【Linux入門】初心者のための基礎知識・講座 > Linuxシェルスクリプト入門|初心者でも動かせる自動化の第一歩
「シェルスクリプトって難しそう」「何から始めればいいかわからない」
Linuxを使い始めて、コマンドには少し慣れてきたけれど、シェルスクリプトとなると別の話に感じる方も多いと思います。

でも実は、シェルスクリプトは「コマンドをファイルに書いて実行するだけ」という、ごくシンプルなものです。
プログラミングの知識がなくても、Linuxのコマンドを少し知っていれば、すぐに動かすことができます。

この記事では、シェルスクリプトを一度も書いたことがない初心者の方向けに、作成から実行までの基本手順と、覚えておくだけで便利になる基礎構文を丁寧に解説します。

この記事のポイント

・シェルスクリプトは「コマンドを並べたファイル」で動かすだけでOK
・chmod +x で実行権限を付与し ./スクリプト名.sh で動かせる
・変数・if・for の3つを押さえれば自動化の基礎は完成する
・初心者はまず「バックアップを自動化するスクリプト」から始めると実感しやすい


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

シェルスクリプトとは何か?コマンドをまとめて自動化するファイル

普段ターミナルに入力しているコマンド、たとえば lscp は、1行ずつ手動で打ち込んでいます。
シェルスクリプトとは、こうしたコマンドをファイルに書いておいて、まとめて実行できるようにしたものです。

たとえば毎朝同じフォルダをバックアップしたい、ログファイルを定期的に整理したい、といった繰り返し作業を自動化できます。

Windowsのバッチファイル(.bat)に相当するもの、と考えると近いです。ただしLinuxのシェルスクリプトは機能がはるかに豊富で、実務の自動化の多くがシェルスクリプトで実装されています。

最初のシェルスクリプトを作って動かす

1. ファイルを作成する

まずテキストエディタでシェルスクリプトファイルを作成します。ここでは nano を使います。

# nanoでファイルを新規作成 nano hello.sh

ファイルが開いたら、以下の内容を入力します。

#!/bin/bash echo "こんにちは、Linuxの世界へようこそ!" echo "今日の日付: $(date)"

1行目の #!/bin/bash(シバン行と呼びます)は「このスクリプトをbashで実行してください」という宣言です。
これがないと、どのシェルで動かすかが曖昧になるため、必ず最初の行に書く習慣をつけましょう。

nanoを保存して閉じるには Ctrl+O(保存)→ EnterCtrl+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

-d:ディレクトリが存在するか確認する条件式
!(感嘆符):条件を否定する。「存在しない場合」という意味になる
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行目に書く)
シェルスクリプトは「覚えることが多い」と思われがちですが、最初は今回紹介した3つ(変数・if・for)だけで十分です。
まずは自分のよく使うコマンドをファイルにまとめて実行してみるところから始めましょう。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
シェルスクリプトをはじめとしたLinuxの実務スキルを体系的に学びたい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>

次に学ぶなら:Linuxスキルアップ記事のご案内

シェルスクリプトの基礎をつかんだら、次はLinuxの各スキルをさらに深めていきましょう。
以下の記事が参考になります。

Linuxコマンドの基礎:ターミナル操作の土台をしっかり固める
ファイル操作コマンド:cp・mv・rmを使いこなして作業効率を上げる
ユーザー管理:rootと一般ユーザーの使い分けを理解する
パーミッション設定:chmodで読み書き実行の権限を管理する
プロセス管理:バックグラウンド処理とpsコマンドをマスターする
ネットワーク確認コマンド:ipコマンドとpingで接続状態を確認する
シェルスクリプト入門:本記事の続きとして、応用的な自動化スクリプトを学ぶ

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。