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