スクリプト設計

スクリプト設計

入出力とプロセス制御|リダイレクト/パイプ/サブシェル

この記事の狙いBash の入出力(リダイレクト・パイプ)とプロセス制御(サブシェル・並列実行)の基本を、安全運用の観点で設計指針に落とし込みます。「どこへ出すか」「どこから読むか」「どの文脈で実行するか」を明示し、副作用とスコープを可視化し...
スクリプト設計

IFS と read -r の安全読込|空白・改行耐性

この記事の狙いシェルスクリプトでテキストやファイル名を安全に読み込むための定石をまとめます。IFS と read -r を正しく使い、空白・タブ・末尾スペース・末尾改行なし行・NUL 区切りに耐える読み込みを実現します。前提と対象Bash ...
スクリプト設計

パターン・正規表現の使い分け|[[ ]] / extglob / grep -E

この記事の狙いBash スクリプトで条件分岐や文字列判定を行うとき、**「glob パターン」と「正規表現」**が混在しやすく、思わぬバグにつながります。ここでは ] におけるパターン一致と正規表現一致の違いを整理し、extglob を含む...
スクリプト設計

select メニュー入門|対話型選択と入力検証

この記事の狙いBash に組み込まれている select 構文を理解し、インタラクティブな選択肢メニューを最小コストで作れるようにします。単純に使うと「空入力で無限ループ」「不正番号で壊れる」などの罠があるため、入力検証・終了条件・デフォル...
スクリプト設計

クォート戦略と文字列安全化|ダブルクォート前提の指針

この記事の狙いBash の文字列安全化を“場当たり”ではなく一貫した戦略として運用できるようにします。ダブルクォートを原則とし、配列・パラメータ展開・コマンド置換・ヒアドキュメント・read 入力・グロブ/IFS/ロケールとの相互作用を事故...
スクリプト設計

パラメータ展開レシピ|既定値・置換・長さ取得

この記事の狙いBash のパラメータ展開を“暗記”ではなくレシピとして使い回せるようにします。既定値・代入・エラー・置換・切り出し・長さ・前後マッチ除去・大文字小文字変換を、安全なクォート方針とともに整理します。前提と対象Bash 4+(一...
スクリプト設計

ヘルプと Usage 整備|自己説明する CLI

この記事の狙いBash 製 CLI を自己説明型にします。--help と --version、わかりやすい Usage/Options/Examples/Exit codes/Env を常に同じ型で出し、引数エラー時は用法を短く見せる実装...
スクリプト設計

モジュール構成と読み込み|共通ライブラリ化と source

この記事の狙いBash スクリプトを**モジュール(再利用可能な小さなライブラリ)**に分割し、確実に読み込むためのレイアウトと仕組みを示します。source の落とし穴(相対パス、二重読み込み、依存順序、名前衝突)を避け、安全・移植性・見...
スクリプト設計

関数設計パターン集|引数/戻り値の流儀

この記事の狙いBash 関数を**「ただの処理の寄せ集め」**ではなく、再利用可能な部品として設計するためのパターンを整理します。引数の受け方・戻り値の返し方・エラー伝播・副作用の扱いなどを、コピペ可の最小例とともに示します。前提と対象Ba...
スクリプト設計

配列・連想配列の基礎|宣言・走査・安全展開

この記事の狙いBash で配列(indexed array)と連想配列(associative array)を安全に扱えるようにします。宣言・要素追加・走査・長さ取得・存在確認・マージ・削除までをコピペで動く最小実装とともに解説し、クォート...
スクリプト設計

shellcheck/shfmt 運用|静的解析と整形

この記事の狙いBash スクリプトの品質を自動で底上げするために、shellcheck(静的解析)と shfmt(整形)の運用を最小コストで組み込みます。ローカル実行・CI・差分運用・一時的な除外の扱いまで、コピペで導入できる形でまとめます...
スクリプト設計

bats-core の使い方|関数単位テスト

この記事の狙いBash スクリプトの関数レベルを素早く検証するために、bats-core を使った最小セットアップと実践パターンを身につけます。入出力・終了コード・標準エラーの検証、フィクスチャの扱い、ヘルパ関数の共有、CI 実行までをコピ...
スクリプト設計

間接展開と printf -v|変数名を安全に参照

この記事の狙いeval を使わずに動的な変数名を安全に扱い、値の取得・代入・検証を行えるようにします。Bash の間接展開(${!name})、nameref(declare -n)、printf -v を組み合わせ、配列・連想配列・スコー...
スクリプト設計

最小テスト入門|入出力比較・期待 exit

この記事の狙いBash スクリプトを手元で即チェックできる、最小限のテスト手法(入出力比較と終了コードの検証)を身につけます。フレームワークは必須ではありません。まずはコピペで動く最小テストから始め、必要があれば bats-core へ広げ...
スクリプト設計

case/esac徹底解説|ifとの使い分け・パターン設計・落とし穴回避

case/esac は、長く伸びた if/elif/else を“読みやすいスクリプト”に変えるための道具です。拡張子ごとの処理、サブコマンドの振り分け、OS 判定のように「値がいくつかの候補に当てはまるだけ」の場面では、case を選ぶだ...