揮発性のメモ2

http://d.hatena.ne.jp/iww/

bashで、ヘルプと初期設定をひとつにまとめる

スクリプト書いてるとき、ヘルプと実体を合わせるのが面倒だし
コメントに書いたことをヘルプにも書き写すのがアホっぽくなったので
できるだけひとつにまとめる実験

実行するとこんな感じになる

$ ./sabun.sh -h

# 差分確認プログラム
# 接続先の / と ローカルディレクトリの差分一覧を表示
# 使い方: sabun.sh -b 192.168.31.5 -d backup202007

# 設定項目と初期値
# -u 接続ユーザ
SSHUSER=hogehoge
# -b 接続先 (必須)
SSHHOST=
# -d 比較対象ディレクトリ (必須)
BBBDIR=

$


ヘルプ表示関数 で、スクリプトの一部分をそのまま表示するようにしてみる

head -$((LINENO-3)) $BASH_SOURCE | tail +3
tailコマンドで先頭を指定行数分 読み飛ばす - 揮発性のメモ2
Man page of BASH

LINENO は、現在の行番号
BASH_SOURCE は、スクリプト自身のファイル名 ($0は使えないよ)

変数の初期設定や定義、使い方などをソースの頭にまとめて書き、
ヘルプオプションで ソースをそのまま 表示する

具体的にはこのようにする

#!/bin/bash

# 差分確認プログラム                                 ←ここから
# 接続先の / と ローカルディレクトリの差分一覧を表示
# 使い方: sabun.sh -b 192.168.31.5 -d backup202007

# 設定項目と初期値
# -u 接続ユーザ
SSHUSER=hogehoge
# -b 接続先 (必須)
SSHHOST=
# -d 比較対象ディレクトリ (必須)
BBBDIR=                                              ←ここまでがヘルプで表示される

function usage(){
  head -$((LINENO-3)) $BASH_SOURCE | tail +3         # ★これ!
  exit
}

while getopts hu:b:d: OPT; do
  case $OPT in
    h) usage  ;;
以下略

先頭から3行目(説明の先頭)から ★の3行前(usage関数のちょっと前、説明の最後尾)までを表示する。

超便利。 今後は自作スクリプトのあたまを全部これにしてみよう