Shell-Script - 計算時間差小工具
Published in:2023-10-03 | category: Shell-Script




#!/bin/bash

linee="-------------------------------------->>>"

clear
echo -e "\n"
echo -e "+---------------------------------------+"
echo -e "|\e[34;1m  計算時間小工具   (請輸入日期或時間)  \e[0m|"
echo -e "|                                       |"
echo -e "|\e[33;1m    Start Time 必須小於  Finish Time   \e[0m|"
echo -e "|                                       |"
echo -e "|\e[35;1m        此小工具為 24 小時制           \e[0m|"
echo -e "|                                       |"
echo -e "|\e[35;1m        請勿輸入超過 24 小時           \e[0m|"
echo -e "+---------------------------------------+"

echo -e "\n"
echo -e "$linee"
echo -e "\n"
echo -e "\e[32;1mStart Time  請輸入開始日期或時間 \e[0m"
echo -e "\n"
echo -e "\e[34;1mex:20230731 或 1615\e[0m \e[35;1m(不接受 2400) \e[0m"
echo -e "\n"
echo -ne "answer \e[32;5m:  \e[0m"
read -e starti
clear

echo -e "\n"
echo -e "+---------------------------------------+"
echo -e "|\e[34;1m  計算時間小工具   (請輸入日期或時間)  \e[0m|"
echo -e "|                                       |"
echo -e "|\e[33;1m    Start Time 必須小於  Finish Time   \e[0m|"
echo -e "|                                       |"
echo -e "|\e[35;1m        此小工具為 24 小時制           \e[0m|"
echo -e "|                                       |"
echo -e "|\e[35;1m        請勿輸入超過 24 小時           \e[0m|"
echo -e "+---------------------------------------+"

echo -e "\n"
echo -e "$linee"
echo -e "\n"
echo -e "\e[32;1mFinish Time  請輸入結束日期或時間 \e[0m"
echo -e "\n"
echo -e "\e[34;1mex:20230804 或 1920\e[0m \e[35;1m(不接受 2400)\e[0m"
echo -e "\n"
echo -ne "answer \e[32;5m:  \e[0m"
read -e finishi
clear
sleep 0.5

echo -e "\n"
echo -e "+---------------------------------------+"
echo -e "|\e[34;1m  計算時間小工具   (請輸入日期或時間)  \e[0m|"
echo -e "|                                       |"
echo -e "|\e[33;1m    Start Time 必須小於  Finish Time   \e[0m|"
echo -e "|                                       |"
echo -e "|\e[35;1m        此小工具為 24 小時制           \e[0m|"
echo -e "|                                       |"
echo -e "|\e[35;1m        請勿輸入超過 24 小時           \e[0m|"
echo -e "+---------------------------------------+"

echo -e "\n"
echo -e "$linee"
echo -e "\n"

case "${starti}" in

	[0-9][0-9][0-9][0-9][0][1-9][0-2][0-9])
		startii=`date -d "${starti}" '+%s'`
		echo -e "開始時間為     : \e[34;1m `date -d @${startii} '+%Y-%m-%d'`\e[0m"
;;
	[0-9][0-9][0-9][0-9][0][1-9][3][0-1])
                startii=`date -d "${starti}" '+%s'`
                echo -e "開始時間為     : \e[34;1m `date -d @${startii} '+%Y-%m-%d'`\e[0m"
;;
	[0-9][0-9][0-9][0-9][1][0-2][0-2][0-9])
                startii=`date -d "${starti}" '+%s'`
                echo -e "開始時間為     : \e[34;1m `date -d @${startii} '+%Y-%m-%d'`\e[0m"
;;
	[0-9][0-9][0-9][0-9][1][0-2][3][0-1])
		startii=`date -d "${starti}" '+%s'`
		echo -e "開始時間為     : \e[34;1m `date -d @${startii} '+%Y-%m-%d'`\e[0m"
;;
	[2][0-3][0-5][0-9])
		startii=`date -d "${starti}" '+%s'`
		echo -e "開始時間為     : \e[34;1m `date -d @${startii} '+%H:%M'`\e[0m"
;;
	[0-1][0-9][0-5][0-9])
		startii=`date -d "${starti}" '+%s'`
		echo -e "開始時間為     : \e[34;1m `date -d @${startii} '+%H:%M'`\e[0m"
;;
	*)
		clear
		echo -e "\n"
		echo -e "$linee"
		echo -e "\n"
		echo -e "\e[31;1m你輸入的開始時間為 \e[33;1m ${starti} \e[0m"
		echo -e "\n"
		echo -e "\e[35;1m輸入錯誤 ERROR \e[0m"
		echo -e "\n"
		echo -e "\e[32;1m月欄位不可大於 \e[34;1m     12 \e[0m"
		echo -e "\n"
		echo -e "\e[32;1m日欄位不可大於 \e[34;1m     30 \e[0m"
		echo -e "\n"
		echo -e "\e[32;1m小時欄位不可大於 \e[34;1m   24 \e[0m"
		echo -e "\n"
		echo -e "\e[32;1m分鐘欄位不可大於 \e[34;1m   59 \e[0m"
		echo -e "\n"
		echo -e "$linee"
		echo -e "\n"
		exit 1
;;
esac
echo -e "\n"

case "${finishi}" in

	[0-9][0-9][0-9][0-9][0][1-9][0-2][0-9])
		finishii=`date -d "${finishi}" '+%s'`
		echo -e "結束時間為     : \e[34;1m `date -d @${finishii} '+%Y-%m-%d'`\e[0m"
;;
        [0-9][0-9][0-9][0-9][0][1-9][3][0-1])
                finishii=`date -d "${finishi}" '+%s'`
                echo -e "結束時間為     : \e[34;1m `date -d @${finishii} '+%Y-%m-%d'`\e[0m"
;;

	[0-9][0-9][0-9][0-9][1][0-2][0-2][0-9])
                finishii=`date -d "${finishi}" '+%s'`
                echo -e "結束時間為     : \e[34;1m `date -d @${finishii} '+%Y-%m-%d'`\e[0m"
;;
	[0-9][0-9][0-9][0-9][1][0-2][3][0-1])
		finishii=`date -d "${finishi}" '+%s'`
		echo -e "開始時間為     : \e[34;1m `date -d @${finishii} '+%Y-%m-%d'`\e[0m"
;;
	[2][0-3][0-5][0-9])
		finishii=`date -d "${finishi}" '+%s'`
		echo -e "結束時間為     : \e[34;1m `date -d @${finishii} '+%H:%M'`\e[0m"
;;
	[0-1][0-9][0-5][0-9])
		finishii=`date -d "${finishi}" '+%s'`
		echo -e "結束時間為     : \e[34;1m `date -d @${finishii} '+%H:%M'`\e[0m"
;;
	*)
		clear
		echo -e "\n"
		echo -e "$linee"
		echo -e "\n"
		echo -e "\e[31;1m你輸入的開始時間為 \e[33;1m ${starti}  \e[0m"
		echo -e "\n"
		echo -e "\e[31;1m你輸入的結束時間為 \e[33;1m ${finishi} \e[0m"
		echo -e "\n"
                echo -e "\e[35;1m輸入錯誤 ERROR \e[0m"
		echo -e "\n"
		echo -e "\e[32;1m月欄位不可大於 \e[34;1m     12 \e[0m"
                echo -e "\n"
		echo -e "\e[32;1m日欄位不可大於 \e[34;1m     30 \e[0m"
		echo -e "\n"
		echo -e "\e[32;1m小時欄位不可大於 \e[34;1m   24 \e[0m"
                echo -e "\n"
		echo -e "\e[32;1m分鐘欄位不可大於 \e[34;1m   59 \e[0m"
                echo -e "\n"
		echo -e "$linee"
		echo -e "\n"
                exit 1
;;
esac

echo -e "\n"
echo -e "$linee"

time1=$(($(date -d "$finishi" +%s)-$(date -d "$starti" +%s)));

if [ $(echo "0 < $time1" | bc): 0 ]
then
        echo -e "\n"
        echo -e "\e[35;5mERROR !!! ERROR !!! ERROR !!!\e[0m"
        echo -e "\n"
        echo -e "\e[35;1m開始時間必須小於結束時間 !!! \e[0m"
        echo -e "\n"
        echo -e "$linee"
        echo -e "\n"
        exit 1
else
        echo -e "\n"
        echo -e "兩者相差秒數為 : \e[31;1m $time1 秒\e[0m"
fi

#time2=$(($time1 / 60));
time2=`echo -e "scale=0; $time1/60"| bc`
echo -e "\n"
echo -e "兩者相差分鐘為 : \e[31;1m $time2 分\e[0m"

#time3=$(($time1 / 60 / 60));
time3=`echo -e "scale=2; $time2/60"| bc`

if [ `echo -e "${time3}"|egrep ".00"|wc -l`:= "1" ]
then
	time31=`echo -e "${time3}"|sed "s/.00//g"`
	echo -e "\n"
	echo -e "兩者相差小時為 : \e[31;1m $time31 時\e[0m"
else
	echo -e "\n"
	echo -e "兩者相差小時為 : \e[31;1m $time3 時\e[0m"
fi

#time4=$(($time1 / 60 / 60 / 24));
time4=`echo -e "scale=2; $time3/24"| bc`

if [ $(echo "1 < $time4" | bc): 0 ]
then
        echo -e "\n"
        echo -e "兩者相差天數為 : \e[31;1m 0$time4 天\e[0m"
else
	if [ `echo -e "${time4}"|egrep ".00"|wc -l`:= "1" ]
	then
		time41=`echo -e "${time4}"|sed "s/.00//g"`
		echo -e "\n"
		echo -e "兩者相差天數為 : \e[31;1m $time41 天\e[0m"
	else
		echo -e "\n"
		echo -e "兩者相差天數為 : \e[31;1m $time4 天\e[0m"
	fi
fi

echo -e "\n"
echo -e "$linee"
echo -e "\n"

Prev:
Github Action - 實現CI/CD自動部署至 Render
Next:
Grafana - CLI 常用指令語法