【git】ローカルとリモートのブランチを削除するスクリプト

マージ済みのブランチを削除する時に、いつもローカルブランチとリモートブランチの両方を削除するのが面倒だったのでスクリプト化しました。

リモートはorigin限定です。
git_del_br.shという名前で作った例です。

#!/bin/bash
set +eu

if [ $# -eq 1 ]; then
    # delete local branch
    loBrCheck=`git branch | grep "^[ ]*${1}\$"`
    if [ ${#loBrCheck} -gt 0 ]; then
        echo "delete local branch."
    git branch -D $1;
    fi

    # delete remote branch
    reBrCheck=`git branch -a | grep "^[ ]*remotes/origin/${1}\$"`
    if [ ${#reBrCheck} -gt 0 ]; then
        echo "delete remote branch"
        git push --delete origin $1;
    fi
else
    echo
    echo "##################################"
    echo " Usage: git_del_br.sh [branch name]"
    echo "##################################"
    echo
fi

【Mac】PCの起動・停止時刻を出力するシェルスクリプト

■環境

macOS High Sierra 10.13.1
bash 4.4.12


職場の勤怠を付ける際に数日分まとめて入力するのですが、
出勤退勤時刻の目安とするため、Macの起動・停止時刻を出すようにしました。

まず、このシェルスクリプトはbash Ver 4.x.x台以上でないと動かないので、
bashのバージョンが3の場合はHomebrewでインストールします。
※執筆時点でMacにデフォルトで入っているbashはVer 3.x.xでした。

$ brew install bash
$ which bash
/usr/local/bin/bash

シェルスクリプトを作成します。
仮でホームディレクトリ直下に「kintai.sh」という名前で作る事にします。

$ vim ~/kintai.sh

シェルの内容は以下の通りです。
シバン(1行目のやつ)のパスは上記のwhichコマンドで確認したbashのパスとします。

#!/usr/local/bin/bash
set +e

declare -A rebootTimes
declare -A shutdownTimes

shutdownList=`last | grep "^shutdown" | cut -d " " -f 28-33`
while read line;
do
    curdate=`env LANG=eu_US.UTF-8 date -j -f "%a %b %d %H:%M" "${line}" "+%Y/%m/%d"`
    curtime=`env LANG=eu_US.UTF-8 date -j -f "%a %b %d %H:%M" "${line}" "+%H:%M"`
    if [ ${#shutdownTimes[${curdate}]} -eq 0 ]; then
        shutdownTimes[${curdate}]=${curtime}
    fi
done << END
$shutdownList
END

rebootList=`last | grep "^reboot" | cut -d " " -f 30-35`
while read line;
do
    curdate=`env LANG=eu_US.UTF-8 date -j -f "%a %b %d %H:%M" "${line}" "+%Y/%m/%d"`
    curtime=`env LANG=eu_US.UTF-8 date -j -f "%a %b %d %H:%M" "${line}" "+%H:%M"`
    rebootTimes[${curdate}]=${curtime}
done << END
$rebootList
END

firstDate=`date +"%Y/%m/01"`
today=`date +"%d"`

firstDate="2017/12/01"

for ((i=0; i < ${today}; i++)); do
    target=`date -v+${i}d -j -f "%Y/%m/%d" "${firstDate}" +"%Y/%m/%d"`
    echo "${target} : ${rebootTimes[${target}]} - ${shutdownTimes[${target}]}"
done

あとはこのシェルに実行権限をつけて実行するだけです。

$ chmod +x ~/kintai.sh
$ ~/kintai.sh
2017/12/01 : 10:14 - 19:16
2017/12/02 :  -
2017/12/03 :  -
2017/12/04 : 10:10 - 20:01
2017/12/05 : 10:06 - 18:44
2017/12/06 : 09:48 - 18:21
2017/12/07 : 11:22 - 15:18
2017/12/08 : 09:47 - 19:07
2017/12/09 :  -
2017/12/10 :  -
2017/12/11 : 10:06 - 19:53
2017/12/12 : 10:12 -

起動時刻はその日に最初に起動した時刻、停止時刻はその日最後に停止した時刻を出力しています。
日を跨いで仕事をした場合は、どうしようもないです。