Bash
表示
概要
[編集]Bash(Bourne Again Shell)は、Brian Foxによって開発されたUNIXシェルで、GNUプロジェクトの一環として1989年にリリースされました。Bourneシェルの後継として設計され、現在最も広く使用されているコマンドラインインターフェースの1つです。
基本構文
[編集]コマンドライン基礎
[編集]- プロンプト表示: 通常ユーザーは$、root(管理者)は#
- コマンド実行: コマンド名 [オプション] [引数]
- 基本的なショートカット:
- Ctrl + C: 実行中のコマンドを中断
- Ctrl + D: EOF(End of File)を送信、シェルを終了
- Ctrl + L: 画面をクリア
- Tab: コマンドやファイル名の補完
変数
[編集]- 変数の定義: 変数名=値(空白を含まない)
- 変数の参照: $変数名 または ${変数名}
name="John" echo $name # John echo ${name} # John
環境変数
[編集]- PATH: コマンド検索パス
- HOME: ホームディレクトリ
- PWD: 現在の作業ディレクトリ
- USER: 現在のユーザー名
- SHELL: 現在使用中のシェル
制御構造
[編集]条件分岐
[編集]if文
[編集]if [ 条件 ]; then コマンド elif [ 条件 ]; then コマンド else コマンド fi
case文
[編集]case 値 in パターン1) コマンド ;; パターン2) コマンド ;; *) コマンド ;; esac
ループ構造
[編集]for文
[編集]for 変数 in リスト do コマンド done
while文
[編集]while [ 条件 ] do コマンド done
関数
[編集]関数定義
[編集]function_name() { コマンド return 値 }
引数の扱い
[編集]- $1, $2, ...: 位置パラメータ
- $#: 引数の数
- $@: 全ての引数(配列として)
- $*: 全ての引数(単一の文字列として)
入出力制御
[編集]リダイレクション
[編集]- >: 標準出力のリダイレクト(上書き)
- >>: 標準出力のリダイレクト(追記)
- <: 標準入力のリダイレクト
- 2>: 標準エラー出力のリダイレクト
- &>: 標準出力と標準エラー出力の両方をリダイレクト
パイプライン
[編集]- |: コマンドの出力を次のコマンドの入力として渡す
command1 | command2
文字列処理
[編集]文字列操作
[編集]- ${#string}: 文字列の長さ
- ${string:position}: 部分文字列の抽出
- ${string//pattern/replacement}: パターン置換
パターンマッチング
[編集]- *: 0個以上の任意の文字
- ?: 任意の1文字
- [...]: 文字クラス
- [^...]: 否定文字クラス
配列
[編集]配列操作
[編集]- 配列の定義: array=(要素1 要素2 ...)
- 要素の参照: ${array[index]}
- 全要素の参照: ${array[@]}
- 配列の長さ: ${#array[@]}
スクリプト作成のベストプラクティス
[編集]エラーハンドリング
[編集]- set -e: エラー時に実行を中断
- set -u: 未定義変数参照時にエラー
- trap: シグナルハンドリング
デバッグ
[編集]- set -x: コマンドトレース
- set -v: 入力行の表示
セキュリティ考慮事項
[編集]- 入力のバリデーション
- 適切な権限設定
- セキュアな一時ファイル作成
高度な機能
[編集]プロセス制御
[編集]- ジョブ制御
- バックグラウンド実行
- プロセス置換
正規表現
[編集]ヒストリー機能
[編集]コマンド履歴の基本
[編集]- history - コマンド履歴の表示
- !n - 履歴番号nのコマンドを実行
- !! - 直前のコマンドを実行
- !文字列 - 最近の「文字列」で始まるコマンドを実行
- !?文字列 - 最近の「文字列」を含むコマンドを実行
- !$ - 直前のコマンドの最後の引数を参照
- !* - 直前のコマンドの全ての引数を参照
履歴の制御
[編集]- HISTSIZE - メモリ上の履歴サイズ
- HISTFILESIZE - 履歴ファイルのサイズ
- HISTFILE - 履歴ファイルの場所(デフォルト: ~/.bash_history)
- HISTCONTROL - 履歴の制御オプション
- ignorespace - スペースで始まるコマンドを履歴に残さない
- ignoredups - 連続する重複したコマンドを履歴に残さない
- ignoreboth - 上記両方を有効化
履歴の検索
[編集]- Ctrl + R - 履歴の逆方向検索
- Ctrl + S - 履歴の順方向検索(要設定)
- 検索中のキー操作:
- Enter - 検索したコマンドを実行
- → - 検索したコマンドを編集
- Ctrl + G - 検索をキャンセル
ジョブコントロール
[編集]ジョブの基本操作
[編集]- command & - コマンドをバックグラウンドで実行
- Ctrl + Z - 実行中のジョブを一時停止
- jobs - バックグラウンドジョブの一覧表示
- fg - 一時停止したジョブをフォアグラウンドで再開
- bg - 一時停止したジョブをバックグラウンドで再開
ジョブ指定子
[編集]- %n - ジョブ番号nのジョブを指定
- %+ または %% - 現在のジョブを指定
- %- - 一つ前のジョブを指定
- %文字列 - コマンドラインが「文字列」で始まるジョブを指定
ジョブの終了制御
[編集]- wait - バックグラウンドジョブの終了を待機
- disown - ジョブをシェルのジョブリストから削除
- nohup - HUPシグナルを無視してコマンドを実行
ディレクトリスタック
[編集]基本操作
[編集]- pushd ディレクトリ - ディレクトリをスタックに追加して移動
- popd - スタックから最上位のディレクトリを削除して移動
- dirs - ディレクトリスタックの表示
- dirs -v - 番号付きでスタックを表示
- dirs -c - スタックをクリア
スタックの参照
[編集]- ~n - スタック内のn番目のディレクトリを参照
- cd ~n - スタック内のn番目のディレクトリに移動
- pushd +n - スタック内のn番目のディレクトリを回転
行編集とキーバインド
[編集]基本的なキーバインド
[編集]カーソル移動
[編集]- Ctrl + A - 行頭に移動
- Ctrl + E - 行末に移動
- Ctrl + F - 一文字前に移動
- Ctrl + B - 一文字後ろに移動
- Alt + F - 一単語前に移動
- Alt + B - 一単語後ろに移動
編集操作
[編集]- Ctrl + U - カーソル位置から行頭までを削除
- Ctrl + K - カーソル位置から行末までを削除
- Ctrl + W - カーソル位置から単語の先頭までを削除
- Alt + D - カーソル位置から単語の末尾までを削除
- Ctrl + Y - 最後に削除したテキストを貼り付け
- Ctrl + T - カーソル位置の文字と1つ前の文字を入れ替え
履歴操作
[編集]- Ctrl + P - 前のコマンド
- Ctrl + N - 次のコマンド
- Alt + < - 履歴の最初に移動
- Alt + > - 履歴の最後に移動
キーバインドのカスタマイズ
[編集]- bind - キーバインドの表示と設定
- ~/.inputrc - キーバインド設定ファイル
# .inputrcの例 "\C-x\C-r": re-read-init-file "\e[A": history-search-backward "\e[B": history-search-forward
編集モード
[編集]- set -o emacs - Emacsモード(デフォルト)
- set -o vi - viモード
- 編集モードの確認: echo $EDITOR
補完機能
[編集]- Tab - コマンド/ファイル名の補完
- Tab Tab - 複数の補完候補を表示
- Alt + ? - 補完候補の表示
- Alt + * - 全ての補完候補を挿入
カスタム補完
[編集]- complete - 補完の設定
- compgen - 補完候補の生成
- ~/.bash_completion - 補完スクリプトの保存場所
この内容は、Bashの対話的な使用を効率化する重要な機能を網羅しています。特にヒストリーとキーバインドの機能は、日常的なシェル操作の効率を大きく向上させます。