Skip to content

スクリプト書く時に何にでも使えそうなやつ

よく使いそうな変数

こんな感じで書いておいて使いまわし。

## base setting
BASEDIR=$(cd `dirname $0`; pwd)
FILEPATH=$(cd `dirname $0`; pwd)/`basename $0`
CMD=$(echo `basename $0`)
PG_NAME=$(echo `basename $0`|sed -e "s/\.\w*$//g")
HOSTNAME=$(hostname -s)
DATE=$(date "+%Y%m%d")

usageを書く時

呼び出したい箇所でパッと出せるようにまとめとくと便利。

usage() {
#echo -e  "\e[1;33m*** corporate IR maintenance set script ***\e[m\n"
cat <<EOT
EOT
}

loggingしたい時

ログ吐いたり標準出力に出したりタイムスタンプ整形したりなどをまとめたやつです。

## function: Logging
logging(){
   EXEC_LOG="${BASEDIR}/${PG_NAME}_${DATE}.log"
   echo "[$(date "+%Y-%m-%d %H:%M:%S")] $1" |tee -a ${EXEC_LOG}
}

メール送りたい時

こんな感じで適宜修正して使う。

## function: mail send
MAIL_ADDR="メアドをここに書く"
MailSend(){

MAIL_TITLE="タイトルをここに (${HOSTNAME})"
MESS=$1

/bin/mail -s "${MAIL_TITLE}" ${MAIL_ADDR} <<EOF
${HOSTNAME}
SCRIPT:${FILEPATH}

`cat "${BASEDIR}/${PG_NAME}_${DATE}.log"`
EOF
}

slack通知したい時

ちょっとSlackに投げたいんですって時。 メンションとかも変数にしておいても良いかな。hereにしてます。

SLACK_EMOJI="絵文字名"
SLACK_CHANNEL="チャンネル名"
SLACK_BOT_NAME="通知ボット名"

# USAGE: slack_notify "この通知の説明や概要" "通知の具体的内容。数字やPathなど" "OK、NGどちらか記載"
slack_notify(){
  #この通知の概要説明文を記載。
  explain=$1
  #通知内容を記載。
  mess=$2
  #statusは以下のcase文で分岐。アタッチメント中のバーの色を指定する。
  state=$3
  #どのホストから飛んだかわかるよう、ホスト名は必ずつける。
  host=$(hostname -s)

  case $state in 
    OK)
      color="#429ef4"
      ;;
    NG)
      color="#D00000"
      ;;
     *)
      color="#f49841"
      ;;
  esac

  curl -X POST --data-urlencode "payload={
     \"icon_emoji\": \"${SLACK_EMOJI}\",
     \"channel\": \"${SLACK_CHANNEL}\",
     \"username\": \"${SLACK_BOT_NAME}\",
     \"text\": \"*${host}* <!here> ${explain}\",
     \"attachments\": [
         { \"text\": \"${mess}\", \"color\": \"${color}\" }
     ]
  }" https://あなたのWebhookURLをここに。
}

エラートラップしてslack通知

上記のSlack通知と組み合わせて使うとスクリプトがこけたらslackに飛んでくる。

#error trap
errtrap(){
  errcode=$?
  MESS="error line $1: command exited with status ${errcode}."
  echo ${MESS}
  slack_notify "実行エラー" "${MESS}" "NG"
}
trap 'errtrap $LINENO' ERR

ディレクトリ掘ったりとか

結果でハンドリングしたい時とかにたまに使う。

check_dir(){
  dir=$1
  if [ -d "${dir}" ];then
    return 0
  else
    return 1
  fi
}

make_dir() {
  dir=$1
  mkdir -p ${dir}

  test "$?" -eq 0 || {
    echo "make directory [${dir}] failed."
    return 1
  }
}

パッケージインストールチェック

使いたいパッケージが入ってなかったら入れる、というやつ。

check_package_install(){
  package=$1
  if type $package > /dev/null 2>&1; then
    return 0
  else
    echo "$package not installed."
    return 1
  fi
}

#使用例
check_package_install tmpwatch || yum install -y tmpwatch