change tz to new bash internal test, remove tabs

This commit is contained in:
Tobias Powalowski 2011-02-04 18:19:22 +01:00
parent fe4e84f3c2
commit 54aca57abb

View file

@ -1,27 +1,27 @@
#!/bin/sh
#!/bin/bash
# written by Tobias Powalowski <tpowa@archlinux.org>
ANSWER="/tmp/.tz"
TITLE="Arch Linux Time And Date Setting"
BASEDIR="/usr/share/zoneinfo"
if [ "$1" = "--setup" ]; then
EXIT="Return to Main Menu"
if [[ "${1}" = "--setup" ]]; then
EXIT="Return to Main Menu"
else
EXIT="Exit"
EXIT="Exit"
fi
abort()
{
DIALOG --yesno "Abort Time And Date Setting?" 6 40 || return 0
[ -e /tmp/.timezone ] && rm -f /tmp/.timezone
[ -e /tmp/.hardwareclock ] && rm -f /tmp/.hardwareclock
[ -e /tmp/.tz ] && rm -f /tmp/.tz
[ -e /etc/localtime ] && rm -f /etc/localtime
[ -e /var/lib/hwclock/adjtime ] && rm -f /var/lib/hwclock/adjtime
[ -e /tmp/.tz-running ] && rm /tmp/.tz-running
clear
exit 1
DIALOG --yesno "Abort Time And Date Setting?" 6 40 || return 0
[[ -e /tmp/.timezone ]] && rm -f /tmp/.timezone
[[ -e /tmp/.hardwareclock ]] && rm -f /tmp/.hardwareclock
[[ -e /tmp/.tz ]] && rm -f /tmp/.tz
[[ -e /etc/localtime ]] && rm -f /etc/localtime
[[ -e /var/lib/hwclock/adjtime ]] && rm -f /var/lib/hwclock/adjtime
[[ -e /tmp/.tz-running ]] && rm /tmp/.tz-running
clear
exit 1
}
# DIALOG()
@ -30,55 +30,55 @@ abort()
# parameters: see dialog(1)
# returns: whatever dialog did
DIALOG() {
dialog --backtitle "$TITLE" --aspect 15 "$@"
return $?
dialog --backtitle "${TITLE}" --aspect 15 "$@"
return $?
}
dohwclock() {
if [ "$HARDWARECLOCK" = "UTC" ]; then
HWCLOCK_PARAMS="$HWCLOCK_PARAMS --utc"
echo UTC > /tmp/.hardwareclock
if [[ "${HARDWARECLOCK}" = "UTC" ]]; then
HWCLOCK_PARAMS="${HWCLOCK_PARAMS} --utc"
echo UTC > /tmp/.hardwareclock
else
HWCLOCK_PARAMS="$HWCLOCK_PARAMS --localtime"
echo localtime > /tmp/.hardwareclock
HWCLOCK_PARAMS="${HWCLOCK_PARAMS} --localtime"
echo localtime > /tmp/.hardwareclock
fi
[ ! -d /var/lib/hwclock ] && mkdir -p /var/lib/hwclock
if [ ! -f /var/lib/hwclock/adjtime ]; then
echo "0.0 0 0.0" > /var/lib/hwclock/adjtime
[[ ! -d /var/lib/hwclock ]] && mkdir -p /var/lib/hwclock
if [[ ! -f /var/lib/hwclock/adjtime ]]; then
echo "0.0 0 0.0" > /var/lib/hwclock/adjtime
fi
hwclock $HWCLOCK_PARAMS
hwclock ${HWCLOCK_PARAMS}
}
dotimezone () {
REGIONS=""
SET_ZONE=""
for i in $(grep ^[A-Z] $BASEDIR/zone.tab | cut -f 3 | sed -e 's#/.*##g'| sort -u); do
REGIONS="$REGIONS $i -"
for i in $(grep ^[A-Z] ${BASEDIR}/zone.tab | cut -f 3 | sed -e 's#/.*##g'| sort -u); do
REGIONS="${REGIONS} ${i} -"
done
while ! [ "$SET_ZONE" = "1" ]; do
SET_REGION=""
DIALOG --menu "Please Select A Region:" 22 60 16 $REGIONS 2>$ANSWER && SET_REGION="1"
region=$(cat $ANSWER)
if [ "${SET_REGION}" = "1" ]; then
ZONES=""
for i in $(grep ^[A-Z] $BASEDIR/zone.tab | grep $region/ | cut -f 3 | sed -e "s#$region/##g"| sort -u); do
ZONES="$ZONES $i -"
done
DIALOG --menu "Please Select A Timezone:" 22 60 16 $ZONES 2>$ANSWER && SET_ZONE="1"
zone=$(cat $ANSWER)
if [ "${SET_ZONE}" = "1" ]; then
DIALOG --infobox "Setting Timezone to $region/$zone ..." 0 0
echo $region/$zone > /tmp/.timezone
[ -e /etc/localtime ] && rm -f /etc/localtime
cp $BASEDIR/$region/$zone /etc/localtime
dohwclock
S_NEXTITEM="2"
fi
else
S_NEXTITEM="1"
break
fi
while ! [[ "${SET_ZONE}" = "1" ]]; do
SET_REGION=""
DIALOG --menu "Please Select A Region:" 22 60 16 ${REGIONS} 2>${ANSWER} && SET_REGION="1"
region=$(cat ${ANSWER})
if [[ "${SET_REGION}" = "1" ]]; then
ZONES=""
for i in $(grep ^[A-Z] ${BASEDIR}/zone.tab | grep ${region}/ | cut -f 3 | sed -e "s#${region}/##g"| sort -u); do
ZONES="${ZONES} ${i} -"
done
DIALOG --menu "Please Select A Timezone:" 22 60 16 ${ZONES} 2>${ANSWER} && SET_ZONE="1"
zone=$(cat ${ANSWER})
if [[ "${SET_ZONE}" = "1" ]]; then
DIALOG --infobox "Setting Timezone to ${region}/${zone} ..." 0 0
echo ${region}/${zone} > /tmp/.timezone
[[ -e /etc/localtime ]] && rm -f /etc/localtime
cp ${BASEDIR}/${region}/${zone} /etc/localtime
dohwclock
S_NEXTITEM="2"
fi
else
S_NEXTITEM="1"
break
fi
done
}
@ -86,110 +86,112 @@ dotimeset() {
SET_TIME=""
USE_NTPDATE=""
HARDWARECLOCK=""
if [ ! -s /tmp/.timezone ]; then
DIALOG --msgbox "Error:\nYou have to select a region and timezone first." 0 0
S_NEXTITEM="1"
dotimezone || return 1
if [[ ! -s /tmp/.timezone ]]; then
DIALOG --msgbox "Error:\nYou have to select a region and timezone first." 0 0
S_NEXTITEM="1"
dotimezone || return 1
fi
DIALOG --yesno "Do you want to use UTC for your clock?\n\nIf you choose 'YES' UTC (recommended default) is used,\nwhich ensures daylightsaving is set automatically.\n\nIf you choose 'NO' Localtime is used, which means\nthe system will not change the time automatically.\nLocaltime is also prefered on dualboot machines,\nwhich also run Windows, because UTC confuses it." 15 65 && HARDWARECLOCK="UTC"
DIALOG --infobox "Syncing hardwareclock to systemclock ..." 0 0
HWCLOCK_PARAMS="--hctosys"
dohwclock
DIALOG --yesno "Your current time and date is:\n$(date)\n\nDo you want to change it?" 0 0 && SET_TIME="1"
if [ "${SET_TIME}" = "1" ]; then
[ $(which ntpdate) ] && DIALOG --defaultno --yesno "'ntpdate' was detected on your system.\n\nDo you want to use 'ntpdate' for syncing your clock,\nby using the internet clock pool?\n(You need a working internet connection for doing this!)" 0 0 && USE_NTPDATE="1"
if [ "${USE_NTPDATE}" = "1" ]; then
if [ ! $(ntpdate pool.ntp.org) ]; then
DIALOG --msgbox "An error has occured, time was not changed!" 0 0
S_NEXTITEM="2"
return 1
fi
DIALOG --msgbox "Synced clock with internet pool successfully.\n\nYour current time is now:\n$(date)" 0 0
else
# display and ask to set date/time
CANCEL=""
dialog --calendar "Set the date.\nUse <TAB> to navigate and arrow keys to change values." 0 0 0 0 0 2> $ANSWER || CANCEL="1"
if [ "$CANCEL" = "1" ]; then
S_NEXTITEM="2"
return 1
fi
local _date="$(cat $ANSWER)"
dialog --timebox "Set the time.\nUse <TAB> to navigate and up/down to change values." 0 0 2> $ANSWER || CANCEL="1"
if [ "$CANCEL" = "1" ]; then
S_NEXTITEM="2"
return 1
fi
local _time="$(cat $ANSWER)"
# save the time
# DD/MM/YYYY hh:mm:ss -> YYYY-MM-DD hh:mm:ss
local _datetime="$(echo "$_date" "$_time" | sed 's#\(..\)/\(..\)/\(....\) \(..\):\(..\):\(..\)#\3-\2-\1 \4:\5:\6#g')"
date -s "$_datetime"
DIALOG --infobox "Syncing systemclock to hardwareclock ..." 0 0
HWCLOCK_PARAMS="--systohc"
dohwclock
DIALOG --msgbox "Your current time is now:\n$(date)" 0 0
fi
if [[ "${SET_TIME}" = "1" ]]; then
[[ $(which ntpdate) ]] && DIALOG --defaultno --yesno "'ntpdate' was detected on your system.\n\nDo you want to use 'ntpdate' for syncing your clock,\nby using the internet clock pool?\n(You need a working internet connection for doing this!)" 0 0 && USE_NTPDATE="1"
if [[ "${USE_NTPDATE}" = "1" ]]; then
if [[ ! $(ntpdate pool.ntp.org) ]]; then
DIALOG --msgbox "An error has occured, time was not changed!" 0 0
S_NEXTITEM="2"
return 1
fi
DIALOG --msgbox "Synced clock with internet pool successfully.\n\nYour current time is now:\n$(date)" 0 0
else
# display and ask to set date/time
CANCEL=""
dialog --calendar "Set the date.\nUse <TAB> to navigate and arrow keys to change values." 0 0 0 0 0 2> ${ANSWER} || CANCEL="1"
if [[ "${CANCEL}" = "1" ]]; then
S_NEXTITEM="2"
return 1
fi
local _date="$(cat ${ANSWER})"
dialog --timebox "Set the time.\nUse <TAB> to navigate and up/down to change values." 0 0 2> ${ANSWER} || CANCEL="1"
if [[ "${CANCEL}" = "1" ]]; then
S_NEXTITEM="2"
return 1
fi
local _time="$(cat ${ANSWER})"
# save the time
# DD/MM/YYYY hh:mm:ss -> YYYY-MM-DD hh:mm:ss
local _datetime="$(echo "${_date}" "${_time}" | sed 's#\(..\)/\(..\)/\(....\) \(..\):\(..\):\(..\)#\3-\2-\1 \4:\5:\6#g')"
date -s "${_datetime}"
DIALOG --infobox "Syncing systemclock to hardwareclock ..." 0 0
HWCLOCK_PARAMS="--systohc"
dohwclock
DIALOG --msgbox "Your current time is now:\n$(date)" 0 0
fi
fi
S_NEXTITEM="3"
}
mainmenu() {
if [ -n "$S_NEXTITEM" ]; then
DEFAULT="--default-item $S_NEXTITEM"
else
DEFAULT=""
fi
DIALOG $DEFAULT --backtitle "$TITLE" --title " MAIN MENU " \
if [[ -n "${S_NEXTITEM}" ]]; then
DEFAULT="--default-item ${S_NEXTITEM}"
else
DEFAULT=""
fi
DIALOG ${DEFAULT} --backtitle "${TITLE}" --title " MAIN MENU " \
--menu "Use the UP and DOWN arrows to navigate menus.\nUse TAB to switch between buttons and ENTER to select." 17 58 13 \
"1" "Select Region and Timezone" \
"2" "Set Time and Date" \
"3" "$EXIT" 2>$ANSWER
case $(cat $ANSWER) in
"1")
dotimezone
;;
"2")
dotimeset
;;
"3")
[ -e /tmp/.tz-running ] && rm /tmp/.tz-running
clear
exit 0 ;;
*)
abort ;;
esac
"1" "Select Region and Timezone" \
"2" "Set Time and Date" \
"3" "${EXIT}" 2>${ANSWER}
case $(cat ${ANSWER}) in
"1")
dotimezone
;;
"2")
dotimeset
;;
"3")
[[ -e /tmp/.tz-running ]] && rm /tmp/.tz-running
clear
exit 0 ;;
*)
abort ;;
esac
}
: >/tmp/.hardwareclock
: >/tmp/.timezone
: >/tmp/.tz
if [ ! -d $BASEDIR ]; then
echo "Cannot load timezone data, as none were found in $BASEDIR" >&2
exit 1
if [[ ! -d ${BASEDIR} ]]; then
echo "Cannot load timezone data, as none were found in ${BASEDIR}" >&2
exit 1
fi
if [ ! $(which hwclock) ]; then
echo "'hwclock' binary not found!" >&2
exit 1
if [[ ! $(which hwclock) ]]; then
echo "'hwclock' binary not found!" >&2
exit 1
fi
if [ ! $(which date) ]; then
echo "'date' binary not found!" >&2
exit 1
if [[ ! $(which date) ]]; then
echo "'date' binary not found!" >&2
exit 1
fi
if [ -e /tmp/.tz-running ]; then
echo "tz already runs on a different console!"
echo "Please remove /tmp/.tz-running first to launch tz!"
exit 1
if [[ -e /tmp/.tz-running ]]; then
echo "tz already runs on a different console!"
echo "Please remove /tmp/.tz-running first to launch tz!"
exit 1
fi
: >/tmp/.tz-running
while true; do
mainmenu
mainmenu
done
clear
exit 0
# vim: set ts=4 sw=4 et: