Bashとは?シェルスクリプトの基本・コマンドを初心者向けに解説

プログラミング

「Bash(バッシュ)」はLinux・macOSの標準シェルです。コマンドラインを使いこなすことで、面倒な作業を自動化したり、サーバーを効率よく管理したりできます。この記事ではBashの基本とシェルスクリプトの書き方を解説します。

Bashとは?

Bash(Bourne Again Shell)は、GNU Projectが開発したUnix系OSの標準コマンドラインインターフェース(シェル)です。コマンドを入力して実行する対話型の操作と、複数のコマンドをファイルに記述して自動実行する「シェルスクリプト」の両方で使われます。エンジニアがLinuxサーバーを操作・CI/CDパイプラインを構築・反復作業を自動化するときにBashは不可欠です。

よく使うLinuxコマンド一覧

コマンド説明使用例
lsファイル一覧を表示ls -la(詳細表示)
cdディレクトリを移動cd /var/www/html
mkdirディレクトリを作成mkdir new_dir
cpファイルをコピーcp file.txt backup/
mvファイルを移動・名前変更mv old.txt new.txt
rmファイルを削除rm -rf dir/(注意!)
grepテキスト検索grep “error” access.log
chmodパーミッション変更chmod 755 script.sh
findファイル検索find . -name “*.py”
curlHTTPリクエストを送るcurl https://api.example.com

シェルスクリプトの基本

# シェルスクリプト例(backup.sh)
#!/bin/bash
# バックアップスクリプト

SOURCE="/var/www/html"
BACKUP="/backup/site_backup.tar.gz"

# アーカイブ作成
tar -czf $BACKUP $SOURCE

# 完了メッセージ
echo "バックアップ完了: $BACKUP"

よくある質問

BashとZshの違いは?

どちらもUnix系シェルですが、macOS Catalina以降のデフォルトシェルがBashからZshに変更されました。ZshはBashと互換性が高く、さらに補完機能・テーマ・プラグインが豊富です。「Oh My Zsh」フレームワークを使うと生産性が大幅に向上します。基本的なコマンドはBashとZshで同じなので、どちらでも学習できます。

WindowsでBashを使える?

はい、WSL(Windows Subsystem for Linux)を使うとWindows上でLinux環境を動かせてBashが使えます。WSL2は本格的なLinux環境を提供しており、開発用途での利用が普及しています。Git Bashをインストールすることで基本的なBashコマンドをWindows上で使うこともできます。

まとめ

Bashはインフラ・DevOps・バックエンド開発で必須のスキルです。基本コマンドをマスターし、シェルスクリプトで作業を自動化できるようになると、エンジニアとしての生産性が大幅に向上します。

次の記事を読む
データ分析・統計に特化した「R言語」について学ぼう
次の記事を読む

Bashでの実践的な自動化スクリプト

Bashスクリプトで日常業務を自動化する実践的な例を紹介します。ログファイルを毎日バックアップするスクリプト・Webサーバーの死活監視スクリプト・複数サーバーへのデプロイスクリプトなどが代表的な用途です。if文・for/whileループ・関数定義・引数処理($1・$2・$@)・exit code(0=成功・1以上=エラー)・標準入出力のリダイレクト(>・>>・2>&1)・パイプライン(|)の基本をマスターすれば実用的なスクリプトが書けます。cronジョブ(crontab)と組み合わせることで定期実行も可能です。

Bashとインフラエンジニアのキャリア

Bash・シェルスクリプトはインフラエンジニア・DevOps・SREには必須スキルです。LinuxサーバーはほぼすべてBashが使えるため、サーバー管理・デプロイ自動化・監視スクリプトでBashは今後も使われ続けます。AnsibleのPlaybook内でも shellモジュールでBashコマンドを実行でき、インフラのコード化(IaC)でもBashの知識が役立ちます。クラウド(AWS・GCP・Azure)のCLIツールもBashから呼び出せるため、クラウドインフラのCLI操作でもBashが活躍します。インフラエンジニアの年収は経験3〜5年で500〜750万円、SRE(Site Reliability Engineer)では700〜1,000万円以上の求人が増えています。

Bashの正規表現とテキスト処理(grep・sed・awk)

Bashでのテキスト処理には正規表現を使うgrep・sed・awkが強力なツールです。grepはパターンにマッチする行を抽出(grep -E で拡張正規表現、-r で再帰検索)、sedはストリームエディタでテキストの置換・削除・追加(sed ‘s/old/new/g’が基本)、awkはフィールド(列)単位の処理が得意な言語です。本番サーバーのログ解析・設定ファイルの一括置換・CSVデータの加工などでgrep/sed/awkは日常的に使われます。「100万行のログから特定のエラーパターンを抽出して集計する」ような処理を数行のシェルスクリプトで実現できることがLinux/UNIXの強力さです。

Bashと他のスクリプト言語(Python・Ruby)との比較

Bashは軽量でどのLinux環境にも存在しますが、複雑な処理になるほど可読性・保守性が下がります。テキスト処理・パイプライン・コマンド実行の連鎖はBashが得意ですが、データ構造(連想配列以外)・文字列操作・エラーハンドリングはPythonの方が書きやすいです。「100行を超えるシェルスクリプトはPythonに書き直すべき」という目安が業界にはあります。ただしDockerfile・GitHub Actionsのworkflow・デプロイスクリプト・環境セットアップなど「コマンドを組み合わせる」用途ではBashが最適です。

Bashのデバッグ方法

Bashスクリプトのデバッグには「set -x」(実行されるコマンドを表示)・「set -e」(エラー時に即終了)・「set -u」(未定義変数をエラー)の組み合わせが定番です。#!/usr/bin/env bash の直後に set -euo pipefail と書くのが安全なスクリプトの定石です。ShellCheck(shellcheck.net・VSCode拡張あり)はBashスクリプトの静的解析ツールで、一般的なバグパターン・移植性の問題を自動で指摘してくれます。bash -n script.sh で構文チェック、bash -x script.sh でトレースモード実行もデバッグに使えます。

Bashのfunctionとモジュール化

Bashスクリプトが100行を超えてきたらfunction(関数)でモジュール化すべきです。functionキーワードまたはfunctionキーワードなしの「名前() { }」構文で関数定義できます。引数は$1・$2・$@で参照し、returnで終了コードを返します(文字列はechoで返す)。スクリプトを複数ファイルに分割してsource(または.)でインクルードする方法でモジュール化できます。ログ関数(タイムスタンプ付きのlog_info/log_error等)・エラーハンドリング関数を共通ライブラリとして作成し、複数スクリプトから使い回すと保守性が上がります。

bashとzshの違いと.zshrc・.bashrcの設定

ホームディレクトリの.bashrc(Bash)または.zshrc(Zsh)はシェルの設定ファイルで、エイリアス・環境変数・パス設定・プロンプトカスタマイズを記述します。aliasでよく使うコマンドに短縮名を付け(alias ll=”ls -la”等)、exportで環境変数を設定します。PATHに新しいディレクトリを追加する場合はexport PATH=”$HOME/.local/bin:$PATH”の形式で記述します。Zshは「Oh My Zsh」フレームワーク・Powerlevel10k(高速でリッチなプロンプト)・zsh-autosuggestions(コマンド補完)・zsh-syntax-highlightingで生産性が大幅に向上します。fishシェルも初心者フレンドリーな代替として人気があります。

Bashでのログ解析とデータ処理実践

Bashを使ったログ解析の実用例を紹介します。Webサーバー(Nginx/Apache)のアクセスログから「アクセス数が多いIPトップ10」はawk ‘{ print $1 }’ access.log | sort | uniq -c | sort -rn | head -10で取得できます。「404エラーの多いURLトップ20」はgrep ” 404 ” access.log | awk ‘{ print $7 }’ | sort | uniq -c | sort -rn | head -20で分析できます。find・xargs・parallel(GNU Parallel)を組み合わせると大量ファイルの一括処理が高速化します。jq(JSONパーサー)をインストールすると、curlでAPIを叩いてJSONレスポンスをBashで処理するパイプラインが書けます。

コメント