Bashスクリプト入門:最初に書くべき簡単な自動化スクリプト例
前回の記事では、cdやlsといったBashの基本的な「単語」(コマンド)を学びました。コマンドを一つひとつ打ち込むだけでも便利ですが、Bashの真の力は、これらの単語を組み合わせて「文章」や「物語」を作り、コンピューターに自動で仕事をさせることにあります。これがBashスクリプトです。
「毎日同じフォルダ構成でプロジェクトを準備している」「複数の画像を一括でリサイズしたい」「定期的にファイルのバックアップを取りたい」…そんな退屈な定型作業、ありませんか?Bashスクリプトを覚えれば、そうした作業を魔法のように一瞬で終わらせることができます。
この記事では、コマンド操作に少し慣れてきた初心者の皆さんを対象に、Bashスクリプトの基本的な書き方から、変数、条件分岐(if文)、繰り返し(for文)といったプログラミングの初歩までを、コピペで動かせる簡単な自動化スクリプトの例と共に解説します。料理のレシピを書き起こすように、あなただけのお手軽な自動化ツールを作ってみましょう!
1. はじめてのBashスクリプト - 自動化の第一歩
Bashスクリプトとは、実行したい一連のコマンドを順番に書いただけの、ただのテキストファイルです。これを作るのに特別なツールは必要ありません。早速、簡単なスクリプトを作って動かしてみましょう。
ステップ1: スクリプトファイルを作成する
まず、hello_script.shという名前でテキストファイルを作成し、以下の内容を書き込みます。ファイルの拡張子は.shとするのが一般的です。
#!/bin/bash
# 画面にメッセージを表示する
echo "こんにちは、Bashスクリプトの世界へ!"
echo "現在の日時は以下の通りです:"
date
一行目の#!/bin/bashは「おまじない」だと思ってください。これは「このファイルはBashで実行してくださいね」とシステムに教えるための記述(シェバンと言います)です。
ステップ2: 実行権限を与える
作成したばかりのスクリプトファイルは、まだ「実行できるプログラム」としては認識されていません。chmodコマンドを使って、ファイルに実行権限を与えましょう。
$ chmod +x hello_script.sh
ステップ3: スクリプトを実行する
準備は万端です!以下のコマンドでスクリプトを実行してみましょう。./は「今いるディレクトリにある」という意味です。
$ ./hello_script.sh
こんにちは、Bashスクリプトの世界へ!
現在の日時は以下の通りです:
2025年 7月 6日 日曜日 09時47分45秒 JST
書いたコマンドが順番に実行されましたね。これがBashスクリプトの基本です!
2. 変数と引数 - 柔軟なスクリプトを作る
決まったことしかできないスクリプトでは、あまり面白くありません。そこで「変数」と「引数」を使って、スクリプトをもっと柔軟にしてみましょう。
変数:データを入れておく「箱」
変数とは、好きなデータ(文字列や数字)を入れておける「名前付きの箱」です。変数名=値の形式で定義し、使うときは$変数名と書きます。
#!/bin/bash
# GREETINGという名前の変数に文字列を格納
GREETING="ようこそ、"
USER_NAME="Alice"
# 変数を使ってメッセージを表示
echo "$GREETING $USER_NAME さん!"
引数:スクリプトに外から情報を与える
スクリプトを実行するたびに中身を書き換えるのは面倒です。そこで「引数(ひきすう)」を使います。これは、スクリプト実行時に外から情報を渡すための仕組みです。$1, $2のように、番号で受け取ることができます。
greet.shという名前で以下のスクリプトを作成してみましょう。
#!/bin/bash
# 実行時の1番目の引数をUSER_NAME変数に格納
USER_NAME=$1
echo "こんにちは、$USER_NAME さん!"
このスクリプトを実行するときに、後ろに名前を付けて実行します。
$ ./greet.sh Bob
こんにちは、Bob さん!
このように、引数を使えばスクリプトの使い回しが格段にしやすくなります。
3. if文による条件分岐 - 状況に応じて処理を変える
プログラミングの基本である「もし〇〇だったら、△△する」という条件分岐も、Bashスクリプトで簡単に書けます。これにはif文を使います。
例えば、「指定したファイルが存在するかどうか」をチェックするスクリプトを作ってみましょう。
#!/bin/bash
FILE_NAME=$1
# もし、$FILE_NAME という名前の「ファイル」が存在するなら
if [ -f "$FILE_NAME" ]; then
echo "ファイル「$FILE_NAME」は見つかりました。"
else
echo "ファイル「$FILE_NAME」は存在しません。"
fi
[ -f "ファイル名" ] というのが、「そのファイルが存在するか?」をチェックする条件式です。このスクリプトを実行してみましょう。
ファイルが存在する場合:
$ touch sample.txt
$ ./check_file.sh sample.txt
ファイル「sample.txt」は見つかりました。
ファイルが存在しない場合:
$ ./check_file.sh another.txt
ファイル「another.txt」は存在しません。
4. for文による繰り返し - 面倒な作業を一網打尽
自動化の真髄は「繰り返し処理」にあります。同じような作業を何度も繰り返すなら、コンピューターにやってもらいましょう。それにはfor文が便利です。
Webサイトの雛形として、複数のHTMLファイルを一気に作成するスクリプトを例に見ていきましょう。
#!/bin/bash
# about, works, contact という名前で処理を繰り返す
for page in about works contact
do
# page変数の中身を使ってファイル名とH1タグを動的に生成
FILE_NAME="${page}.html"
TITLE_TEXT=$(echo "$page" | sed 's/./\u&/') # 先頭を大文字に変換
# ヒアドキュメントを使って、まるごとHTMLを書き込む
cat << EOF > $FILE_NAME
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>$TITLE_TEXT Page</title>
<style>
body { font-family: sans-serif; line-height: 1.6; color: #333; }
h1 { color: #0056b3; }
</style>
</head>
<body>
<h1>This is the $TITLE_TEXT page.</h1>
<p>Content for the $page page goes here.</p>
</body>
</html>
EOF
echo "Created ${FILE_NAME}."
done
echo "All pages created!"
このスクリプトは、about, works, contactという3つの単語についてループ処理を行い、それぞれの名前で完全なHTMLファイルを生成します。<< EOF から EOF までの部分はヒアドキュメントと呼ばれ、複数行の文字列をそのまま出力するのに便利です。
実行してみましょう。
$ ./create_pages.sh
Created about.html.
Created works.html.
Created contact.html.
All pages created!
生成されたファイルの中身を確認してみます。
$ cat about.html
<!DOCTYPE html>
<html lang="ja">
...
<h1>This is the About page.</h1>
...
</html>
見事に、ページごとに内容の違うHTMLファイルが3つ、一瞬で出来上がりましたね!
まとめ
今回は、Bashスクリプトの世界への第一歩として、基本的な構文と簡単な自動化の例を見てきました。
- 一連のコマンドをファイルにまとめるだけで、それがスクリプトになる。
- 変数や引数を使えば、スクリプトはもっと柔軟で再利用しやすくなる。
- if文を使えば、条件に応じた処理の分岐ができる。
- for文を使えば、面倒な繰り返し作業をコンピューターに任せられる。
スクリプトというと難しく聞こえるかもしれませんが、結局は「いつも手で打っているコマンドを順番に書き出したもの」に過ぎません。まずは、あなたが普段よく行う作業をスクリプトにできないか考えてみましょう。その小さな一歩が、あなたを退屈な作業から解放し、もっとクリエイティブな仕事に集中させてくれるはずです。
さて、基本的な書き方を覚えたら、次はより実践的で「良い」とされる書き方や、初心者が陥りがちなミスを避けるためのコツを学びたくなりますよね。次回の記事では、そうしたベストプラクティスについて解説していきます。