スクリプト書く時に何にでも使えそうなやつ
よく使いそうな変数
こんな感じで書いておいて使いまわし。
## 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