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の対話的な使用を効率化する重要な機能を網羅しています。特にヒストリーとキーバインドの機能は、日常的なシェル操作の効率を大きく向上させます。