Linuxシェルスクリプト入門!bashやzshで業務効率化・自動化の基本を徹底解説
生徒
「Linuxの勉強を始めたのですが、シェルスクリプト(Shell Script)という言葉をよく耳にします。これは一体何のために使うものなのですか?」
先生
「シェルスクリプトは、Linux(リナックス)で行う操作をひとまとめにして自動化するための台本(シナリオ)のようなものです。毎日行う面倒な作業を、一瞬で終わらせることができるんですよ。」
生徒
「bash(バッシュ)やzsh(ズィーシェル)という言葉も聞くのですが、それらもシェルスクリプトと関係があるのでしょうか?」
先生
「関係は大ありです!bashやzshは、人間が入力した命令をコンピュータに伝える仲介役であるシェル(Shell)の種類のことですね。今日はその仕組みを、初心者の方にもわかりやすく丁寧に解説していきますね。」
Linuxを初めて学ぶ人や、 OS・プロセス・メモリ管理・仮想マシン・コンテナの仕組みを図解で理解したい人におすすめの定番書籍です。
試して理解 Linuxのしくみを見る※ Amazonアソシエイト広告リンク
1. シェルスクリプトとは?読み方と基本概念
シェルスクリプトは、読み方はシェルスクリプト(Shell Script)といいます。LinuxやUNIX系(ユニックス系)のオペレーティングシステムにおいて、複数のコマンド(命令)を一つのテキストファイルに書き込み、それを実行することで、複雑な処理や繰り返しの作業を自動化する仕組みのことです。
例えば、毎日決まった時間にバックアップを取ったり、大量のファイル名を一括で変更したりといった作業を、人間が手動で行うと間違いが起きやすいですが、シェルスクリプトを使えば正確に、かつ高速に処理を完遂できます。
シェルとは、コンピュータの核となるOS(オーエス)と、操作をする人間との間に立って、橋渡しをするソフトウェアのことを指します。貝殻(Shell)が中身を包んでいるように、OSの中核(カーネル)を包み込んでいることからこの名前がつきました。このシェルに対して、一連の台本(スクリプト)を渡して実行させるのがシェルスクリプトの正体です。
2. 代表的なシェルの種類とbash・zshの違い
Linuxには、いくつかのシェルの種類が存在します。自分の環境でどのシェルが動いているかを知ることは、スクリプトを書く上で非常に重要です。
- bash(バッシュ): 現在、世界で最も広く利用されている標準的なシェルです。多くのLinuxディストリビューションで初期設定として採用されています。
- zsh(ズィーシェル): 近年、非常に人気が高まっているシェルです。bashとの互換性が高く、かつ補完機能やカスタマイズ性が非常に強力です。Macの標準シェルとしても採用されています。
- sh(エスエイチ): 最も歴史が古いシェルです。機能はシンプルですが、ほぼ全てのUNIX系OSで動作するため、汎用性が非常に高いのが特徴です。
シェルスクリプトを書く際は、自分がどのシェルの機能を使って動かしたいのかを宣言する必要があります。これを「シバン(Shebang)」と呼びます。
3. 初めてのシェルスクリプト!Hello Worldを表示する
まずは、画面に文字を表示するだけの最もシンプルなスクリプトを作成してみましょう。ファイル名は、慣習として「.sh」という拡張子をつけます。ここでは「test.sh」というファイルを作成すると仮定します。
以下のコードは、一般ユーザー(標準ユーザー)として実行する例です。
cat test.sh
#!/bin/bash
echo "こんにちは!シェルスクリプトの世界へようこそ。"
chmod +x test.sh
./test.sh
こんにちは!シェルスクリプトの世界へようこそ。
最初の行にある #!/bin/bash が、このファイルはbashで実行してくださいという意味の宣言です。chmod +x(クロモド・プラス・エックス)は、ファイルに実行権限(実行してもよいという許可)を与えるコマンドです。これにより、プログラムとして動かせるようになります。
4. 変数を使ってデータを効率的に管理する
プログラミングの基本である変数(ヘンスウ)は、シェルスクリプトでも大活躍します。変数とは、データを入れておくための名前付きの箱のことです。
例えば、何度も使うファイル名やユーザー名を一つの変数にまとめておけば、後で変更が必要になったときも1箇所を書き換えるだけで済みます。変数を参照するときは、名前の前に $(ドル記号)を付けます。
cat var_test.sh
#!/bin/bash
NAME="Linux太郎"
echo "こんにちは、${NAME}さん!"
echo "今日は、$(date) です。"
./var_test.sh
こんにちは、Linux太郎さん!
今日は、2026年 4月 1日 水曜日 19:58:04 JST です。
$(date)(カッコ・デイト)のように書くと、コマンドの実行結果を変数のように扱うことも可能です。これをコマンド置換(コマンドチカン)と呼び、動的なスクリプト作成には欠かせない技術です。
5. 条件分岐(if文)で処理を使い分ける
「もし、ある条件が成立したらAを行い、そうでなければBを行う」という処理を条件分岐(ジョウケンブンキ)といいます。これを使うことで、エラーチェックや状況に応じた自動判断が可能になります。
例えば、特定のファイルが存在するかどうかを確認してから処理を開始するスクリプトを見てみましょう。
cat check_file.sh
#!/bin/bash
TARGET="sample.txt"
if [ -f "$TARGET" ]; then
echo "$TARGET は見つかりました。処理を開始します。"
else
echo "$TARGET が存在しません。中断します。"
fi
./check_file.sh
sample.txt が存在しません。中断します。
-f というのは、ファイルが存在するかどうかを判定するテスト演算子(テストエンザンシ)です。このように、条件に合わせて動きを変えることで、スクリプトの信頼性がぐっと高まります。
6. 繰り返し処理(for文)で大量の作業を自動化する
シェルスクリプトの真骨頂は、繰り返し処理(クリカエシショリ)です。例えば、100個のファイルの拡張子を一気に変えたり、複数のバックアップ先に対して順番にデータを送信したりすることができます。
以下の例では、1から3までの数字を順番に表示する基本的な繰り返しを記述しています。
cat loop.sh
#!/bin/bash
for i in 1 2 3
do
echo "ループ回数: $i 回目"
done
./loop.sh
ループ回数: 1 回目
ループ回数: 2 回目
ループ回数: 3 回目
手作業で1回ずつコマンドを打つのは大変ですが、この for(フォー)文を使えば、どんなに膨大なリストであってもコンピュータが文句を言わずに一瞬で処理してくれます。
7. システム管理者のためのルート権限スクリプト
システム全体の設定変更や、ログファイルの整理などを行う場合は、管理者権限であるルート(root)ユーザーとしての操作が必要になります。読み方はroot(ルート)です。
例えば、システム上の不要な一時ファイルを削除し、ディスク容量を確保する管理用スクリプトの例です。ルートユーザーとして実行するため、プロンプトが変化します。
cat /root/cleanup.sh
#!/bin/bash
echo "システムのゴミ箱を空にします..."
rm -rf /tmp/test_cache/*
echo "クリーンアップが完了しました。"
/root/cleanup.sh
システムのゴミ箱を空にします...
クリーンアップが完了しました。
rm -rf(アールエム・マイナス・アールエフ)コマンドは、指定したディレクトリの中身を強制的に削除する非常に強力な命令です。ルート権限でスクリプトを動かす際は、間違いがあるとシステムを壊してしまう恐れがあるため、慎重に作成する必要があります。
8. シェルスクリプトを学ぶメリットと活用のコツ
ここまで見てきたように、シェルスクリプトをマスターすると、普段のPC操作が劇的に楽になります。IT業界の現場では、サーバーの構築作業やデプロイ(システムの公開作業)において、必ずと言っていいほどシェルスクリプトが使われています。
初心者が学習をスムーズに進めるためのコツは、以下の3点です。
- まずは一行のコマンドから: 複雑なスクリプトをいきなり書こうとせず、まずはターミナルで一行のコマンドを実行し、成功することを確認します。
- コメントを活用する:
#(シャープ)から始まる行はコメントとして無視されます。後から自分が見返したときに何をしているかわかるよう、日本語で説明を書き添える癖をつけましょう。 - 他の人が書いたスクリプトを読む: インターネット上には多くのサンプルが公開されています。それらを模倣し、自分なりに改造してみることが上達への近道です。
最初は黒い画面(ターミナル)に抵抗があるかもしれませんが、自分の命令通りにコンピュータがテキパキと動く様子を見るのは非常に楽しいものです。ぜひ、一歩ずつシェルスクリプトの魅力に触れてみてください。
LPICレベル1の合格を目指している人や、 Linuxコマンド・シェル・ネットワーク・セキュリティの試験対策を効率よく進めたい人におすすめの定番問題集です。
Linux教科書 LPICレベル1 スピードマスター問題集を見る※ Amazonアソシエイト広告リンク
まとめ
今回の記事では、Linux環境における業務効率化の要となるシェルスクリプト(Shell Script)の基本から、bashやzshといったシェルの種類、そして変数や条件分岐、繰り返し処理といった実践的なプログラミング手法までを徹底的に解説してきました。シェルスクリプトは、単なるコマンドの羅列ではなく、複数の複雑な工程を一つのファイルにまとめることで、人為的なミスを減らし、作業時間を劇的に短縮するための強力な自動化ツールです。
シェルスクリプト導入の重要ポイント
シェルスクリプトをマスターすることで、エンジニアとしての生産性は飛躍的に向上します。特に、サーバー管理やインフラ構築の現場では、以下の要素が不可欠です。
- シバン(Shebang)の設定:
#!/bin/bashのように、どのシェルで実行するかを明記すること。 - 実行権限の付与:
chmod +xコマンドを使用して、作成したスクリプトファイルに実行許可を与えること。 - 変数の有効活用:
${VARIABLE}形式で値を管理し、メンテナンス性を高めること。 - 制御構造の理解:
ifによる条件分岐やforによるループ処理を組み合わせ、動的な処理を実現すること。
実践的な応用例:バックアップ自動化スクリプト
まとめとして、学んだ知識を統合した実践的なサンプルプログラムを紹介します。このスクリプトは、指定したディレクトリのバックアップを作成し、ログを記録する実用的な内容です。
#!/bin/bash
# バックアップ元と保存先の設定
SOURCE_DIR="/home/user/documents"
BACKUP_DIR="/backup/data"
DATE=$(date +%Y%m%d)
# 保存先ディレクトリが存在しない場合は作成する
if [ ! -d "$BACKUP_DIR" ]; then
echo "バックアップディレクトリを作成します..."
mkdir -p "$BACKUP_DIR"
fi
# 圧縮バックアップの実行
echo "バックアップを開始します: ${DATE}"
tar -czf "${BACKUP_DIR}/backup_${DATE}.tar.gz" "$SOURCE_DIR"
# 実行結果の確認
if [ $? -eq 0 ]; then
echo "バックアップが正常に完了しました。"
else
echo "エラーが発生しました。"
fi
このように、条件分岐(if文)とコマンド置換(dateコマンドの利用)を組み合わせることで、実務でそのまま使える自動化ツールを構築できます。Linuxコマンドを一つずつ打つ手間から解放され、よりクリエイティブな作業に時間を割くことができるようになります。
IT業界において、シェルスクリプトのスキルは「持っていて当たり前」とされる場面も多く、基礎を固めることはキャリアアップにも直結します。まずは自分のパソコン内のファイル整理など、身近な作業の自動化から始めてみましょう。
生徒
「先生、まとめまで読んでみて、シェルスクリプトがいかに便利かよくわかりました!単なるコマンドの集まりだと思っていましたが、プログラミングのように条件によって動きを変えられるんですね。」
先生
「その通りです!特に大規模なサーバー運用などでは、数百台のサーバーに対して同じ設定を反映させることもあります。そんな時、手作業では絶対に不可能ですから、シェルスクリプトが魔法のような力を発揮するんですよ。」
生徒
「魔法ですか!でも、さっきのルート権限での操作のように、間違えると怖いというイメージもあります。初心者が気をつけるべきことはありますか?」
先生
「良い質問ですね。まずは、破壊的なコマンド(rm -rfなど)を使う前に、echoを使って『どのファイルが消されようとしているか』を画面に表示させてテストするのが鉄則です。これをドライラン(模擬実行)と呼びます。慎重に、かつ大胆に自動化に挑戦してみてください。」
生徒
「なるほど、まずは表示させて確認するんですね。bashやzshを使いこなして、仕事の効率をどんどん上げていきたいと思います。ありがとうございました!」
先生
「その意気です!コツコツとスクリプトを書いていけば、いつの間にかLinuxの深い仕組みまで理解できているはずですよ。頑張りましょうね!」