togatttiのエンジニアメモ

過度な期待はしないでください.

作業用Bashスクリプトのテンプレート

よく自分で書く作業用Bashスクリプトのテンプレートを残す。

気にかけていることは、

  • -e オプションで、エラー時点で処理終了
  • エラー時は、$LINENOで、該当行数出力
  • -x オプションで、デバッグ

あたりは、必ずできるようにしてる。

余裕がある時は、

  • 出力を着色

テンプレート

#!/usr/bin/env bash
# template.bash
set -e
[ -n "$DEBUG" ] && set -x

help() {
  echo "$0 some args"
  echo "some help"
  exit 1
}

if [ -t 1 ]; then
  green_color="\e[1;32m"
  red_color="\e[1;31m"
  reset="\e[0m"
else
  color=""
  reset=""
fi

indent_output() {
  while read -r data; do
  printf " ${green_color} | ${reset}  %s\n" "$data"
  done
}

print_colored() {
  printf "${green_color}%s${reset}\n" "$1"
}

err_exit() {
  printf "${red_color}[ERROR] %s${reset} at line ${LINENO}\n" "$@"
  exit 1
}

for arg; do
  case "$arg" in
    --help) help ;;
      * ) 
  esac
done

print_colored "Updating some software..."
echo -e "hoge\nbar\nfoo" | indent_output
err_exit "failed zannen"

exit 0

出力は、

f:id:togattti1990:20160313115853p:plain

デバッグ時は、

DEBUG=1 bash template.bash

とかで、叩くとデバッグできる。