#!/bin/bash
# Skrypt validint weryfikujący poprawność liczb całkowitych, z ujemnymi włącznie.

validint()
{
  # Sprawdzenie poprawności pierwszego argumentu i porównanie go z minimalną wartością
  # podaną w drugim argumencie i maksymalną w trzecim. Jeżeli zadana wartość
  # nie zawiera się w podanym zakresie lub nie składa się wyłącznie z cyfr,
  # zgłaszany jest błąd.

  number="$1";      min="$2";      max="$3"

  if [ -z $number ] ; then
    echo "Podaj liczbę." >&2 ; return 1
  fi

  # Czy pierwszym znakiem jest myślnik?
  if [ "${number%${number#?}}" = "-" ] ; then
    testvalue="${number#?}" # Wyodrębnienie do sprawdzenia wszystkich znaków
                            # oprócz pierwszego.
  else
    testvalue="$number"
  fi
  
  # Utworzenie na potrzeby weryfikacji wartości zawierającej wyłącznie cyfry.
  nodigits="$(echo $testvalue | sed 's/[[:digit:]]//g')"
  
  # Sprawdzenie, czy wartość zawiera inne znaki niż cyfry.
  if [ ! -z $nodigits ] ; then
    echo "Błędna wartość! Dozwolone są tylko cyfry, bez przecinka, spacji itp." >&2
    return 1
  fi

  if [ ! -z $min ] ; then
    # Czy podana liczba jest mniejsza niż wartość minimalna?
    if [ "$number" -lt "$min" ] ; then
      echo "Liczba $number jest za mała. Minimalna wartość to $min." >&2
      return 1
    fi
  fi
  if [ ! -z $max ] ; then
    # Czy podana liczba jest większa niż wartość maksymalna?
    if [ "$number" -gt "$max" ] ; then
      echo "Liczba $number jest za duża. Maksymalna wartość to $max." >&2
      return 1
    fi
  fi
  return 0
}

# POCZĄTEK GŁÓWNEJ CZĘŚCI SKRYPTU. USUŃ LUB ZAMIEŃ W KOMENTARZ KOD PONIŻEJ TEGO WIERSZA,
# JEŻELI TEN SKRYPT BĘDZIE WYKORZYSTYWANY W INNYCH SKRYPTACH.
# =================

# Weryfikacja poprawności danych
#if validint "$1" "$2" "$3" ; then
#  echo "Podana wartość jest poprawną liczbą całkowitą zawartą w zadanym zakresie."
#fi
