heads/initrd/bin/change-time.sh
Jonathon Hall 05b3d85c93
change-time.sh: Remind of the system time when beginning
Show the system time when starting to change the time.

Signed-off-by: Jonathon Hall <jonathon.hall@puri.sm>
2024-08-06 14:01:49 -04:00

74 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
#change time using hwclock and date -s
clear
echo "The system time is: $(date "+%Y-%m-%d %H:%M:%S %Z")"
echo
echo "Please enter the current date and time in UTC"
echo "To find the current date and time in UTC, please check https://time.is/UTC"
echo
get_date () {
local field_name min max
field_name="$1"
min="$2"
max="$3"
echo -n "Enter the current $field_name [$min-$max]: "
read -r value
echo
#must be a number between $2 and $3
while [[ ! $value =~ ^[0-9]+$ ]] || [[ ${value#0} -lt $min ]] || [[ ${value#0} -gt $max ]];
do
echo "Please try again, it must be a number from $min to $max."
echo -n "Enter the current $field_name [$min-$max]: "
read -r value
echo
done
# Pad with zeroes to length of maximum value.
# The "$((10#$value))" is needed to handle 08 and 09 correctly, which printf
# would otherwise interpret as octal. This effectively strips the leading
# zero by evaluating an arithmetic expression with the base set to 10.
value="$(printf "%0${#max}u" "$((10#$value))")"
}
enter_time_and_change()
{
get_date "year" "2024" "2200"
year=$value
get_date "month" "01" "12"
month=$value
get_date "day" "01" "31"
day=$value
get_date "hour" "00" "23"
hour=$value
get_date "minute" "00" "59"
min=$value
get_date "second" "00" "59"
sec=$value
if ! date -s "$year-$month-$day $hour:$min:$sec" &>/dev/null; then
return 1
fi
return 0
}
while ! enter_time_and_change; do
echo "Could not set the date to $year-$month-$day $hour:$min:$sec"
read -rp "Try again? [Y/n]: " try_again_confirm
if [ "${try_again_confirm^^}" = N ]; then
exit 1
fi
echo
done
hwclock -w
echo "The system date has been sucessfully set to $year-$month-$day $hour:$min:$sec UTC"
echo
echo "Press Enter to return to the menu"
echo
read -r nothing