tottimotottiのブログ

コンサルときどきエンジニアの銭湯巡りランナーの備忘録。

シェルの新規開発

夜間ジョブが吐き出す、ログをローテーションするシェルを新規開発。

UNIXと言えば、影響調査や見積でgrep調査ぐらいしか触ったことが無くて、シェルは初めてでとても苦労したが、その時の備忘録的にメモ。ちなみに、bash

 

○変数?名

$数字→「ls」で表示される項目。左から1、2、3……。6が確か、更新日時(年月日)、7が確か更新日時(時間)。

正規表現

[ ](かっこ)→orの意味。

ex) [:-]→「:」か「-」

デバッグ

bash -x シェル名→一気に変数の中身もばらした上で出力してくれる。ソースをいじらなくて良いから、テストで使える。

trap 'read -p "$0($LINENO) $BASH_COMMAND"' DEBUG→ソースに埋め込む必要があるから、実際のテストでは使えないけど、ステップインできる。

 

○ハマったところ

・変数の表現→{ }をつけるつけないで、処理が通る通らない、ってことがあった。

・ファイルの並べ替え処理の実装方法で詰まった。ファイル名の「_yyyymmddHHMMSS」の降順で並び替える必要があったんだけど、ずっと「ls」で検索してたが、良い方法が見つからなかった。が、「find」と「sort」を使えば、出来た。

 

○感想

結局、プログラムに出来ないことは基本的には無い、ということを再確認したけど、やっぱり、具体的な実装方法は知らないとできない。正規表現で検索対象を指定する処理と、for文を一文で書ける、なんていう想像力は、シェルを触ったことがある人じゃないと持っていないんじゃないか?

設計の段階から、プログラムレベルでイメージが湧かないとキツイ。正規表現周りの部分が、具体的にどうやって実装するのか、自分一人ではイメージ出来なかった。今回は有識者によるサンプルコードがあったから、まだ助かったけど、これがゼロベースでやれ、って言われてたらもうあと2人日くらい必要だったと思う。