#!/bin/bash
# Skrypt setdate będący przyjaznym interfejsem dla polecenia date.
# Wymagany format daty: [[[[[cc]yy]mm]dd]hh]mm[.ss].

# Aby ułatwić zadanie, poniższa funkcja prosi o podanie określonej
# części daty, wyświetlając w nawiasach [] domyślną wartość,
# odpowiadającą bieżącej dacie i godzinie.

. ../1/library.sh # Biblioteka skryptów, zawierająca funkcję echon().

askvalue()
{
  # $1 = nazwa zmiennej, $2 = wartość domyślna, $3 = wartość maksymalna,
  # $4 = wymagana liczba znaków/cyfr, $5 = nazwa wartości w j. polskim

  echon "$5 [$2] : "
  read answer
  if [ ${answer:=$2} -gt $3 ] ; then
    echo "$0: wartość $1 $answer jest błędna"; exit 0
  elif [ "$(( $(echo $answer | wc -c) - 1 ))" -lt $4 ] ; then
    echo "$0: wartość $1 $answer jest za krótka, podaj $4 cyfry"; exit 0
  fi
  eval $1=$answer   # Przypisanie wartości podanej zmiennej.
}

eval $(date "+nyear=%Y nmon=%m nday=%d nhr=%H nmin=%M")

askvalue year $nyear 3000 4 rok
askvalue month $nmon 12 2 miesiąc
askvalue day $nday 31 2 dzień
askvalue hour $nhr 24 2 godzina
askvalue minute $nmin 59 2 minuta

squished="$year$month$day$hour$minute"

# Jeżeli używasz systemu Linux, wpisz:
# squished="$month$day$hour$minute$year"
# Tak, w systemach Linux, macOS i BSD format jest różny. Nie ułatwia to zadania, prawda?

echo "Użyte zostanie polecenie date $squished. " \
     "Będziesz musiał wpisać hasło dla polecenia sudo:"
#sudo date $squished

exit 0
