bash で script 書くときに気をつけたいことと備忘録
bash で久しぶりに真面目にスクリプトを書こうとしたときに、ありとあらゆる全てのことを忘れていました。そこで、ありとあらゆるサイトを参考に bash のやりなおしをしました。更にいうと、新たな手法にもチャレンジしました。その軌跡をここに記しておきます。
BDD
bash script でテスト駆動なんて、と思っていましたが、BDD までできる世の中になっていました。
初めての TDD がRSpec: Behaviour Driven Development for Rubyだったので、ちょうどよかったです。というか、もしかしたら TDD はあまり経験がなくて、BDD ばっかりかもしれません。
shellspec/shellspec: A full-featured BDD unit testing framework for bash, ksh, zsh, dash and all POSIX shells
ShellSpec - シェルスクリプト用のフル機能のBDDユニットテストフレームワーク - Qiita
ShellSpec を使って、テスト駆動でシェルスクリプトを書いてみる
なお、実際のcurl
コールアウト部分は、Swagger でモック立てました。やりすぎか。
API Documentation & Design Tools for Teams | Swagger
命名規則
たまに真面目にプログラム作ろうとすると、思ったよりクラス名やメソッド名にハマります。set
とget
でごまかすのは良くないですね。ちゃんとしよう。bash の script の場合、特にクラス名に悩むことはないですが、クラス程度のスコープでファイルを区切ったので、ファイル名の命名規則として参考にしたりしています。
うまくクラス名を付けるための参考情報 - Qiita
関数名によく使われる英単語(動詞)の意味とニュアンス | PHP Archive
bash scripts - best practicies
ほぼ本題。「えっ、そんなことするんだ」みたいな書き方が多く、とても学びの多い1週間でした。
styleguide | Style guides for Google-originated open-source projects
Best Practices for Writing Bash Scripts | by Mohit Sharma | FAUN Publication
移植性・可搬性の高いシェルスクリプトを書くための技術まとめ - Qiita
シェルスクリプトを高級言語のような書き味に近づける Tips 集
bashスクリプティング研修の資料を公開します - エムスリーテックブログ
bashスクリプトの最初の方に書いておくと少しだけ安心できる数行のコード - Qiita
bash shell 引数
$0
, $1
... あたりは覚えてんだけどね。
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
<処理>
fi
bash エラー処理まわり
TRAP しておいたり、エラー中断した場合の対応
シェルスクリプトでset -eしているときに処理を中断せずエラーを扱う方法
シェル、シェルスクリプトの使い方まとめ - ぺい
bash で ERR
を stacktrace したいとき
bash stacktrace
bashのtrap(ERR)が関数内に継承されないわけがない - Qiita
Bashで自身の関数名と呼び出し元の関数名を取得する - Qiita
bash でループ
なんだろう。常に忘れてしまう。
ShellScript (Bash) よく使うループ文 まとめ | tyablog.net
Bashでいろいろループする - Qiita
bash: readとパイプと環境変数 | Webシステム開発/教育ソリューションのタイムインターメディア
read:標準入力から変数へ代入する10事例!意外な例も?
bashでjqを使ってJSONの配列をループさせる - Qiita
bash で test するとき
[test と [ と [ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog
シェルスクリプト(bash)のif文やwhile文で使う演算子について - Qiita
Bashのif文でANDやOR条件、&&や||演算子を使う | 晴耕雨読
シェルで変数の空文字判定 | ハックノート
関数関係
実行ファイルの有無で判断する処理を case
で増やしたくなかったのと、そこは関数で呼ぶでしょみたいなときに。
bashでfunctionが存在するかしらべる - 株式会社BEFOOL ブログ
一応、ファイルの場合
Bash Shell Script - ファイルが存在することを確認
共通関数は外部ファイルにまとめるよね
シェルスクリプトで共通関数を外部ファイルに定義して使う方法これだけ! | beyondDays
共通変数(関数じゃないな)
シェルスクリプトで外部ファイルに記述された変数を利用する方法 | 俺的備忘録 〜なんかいろいろ〜
ファイルの拡張子まわり
macOS の find コマンドで正規表現を使い、複数の拡張子を検索する - Qiita
bashの変数展開によるファイル名や拡張子の取得 - Qiita
Discussion