#!/bin/basḧ́
# tätä skriptiä kutsutaan: <polku>TestaaOnkoReaaliluku <testattava luku>       16.5.2011 petteriIII
function TestaaOnkoLukuEtumerkitonKokonaisluku () {
local luku
luku=$1
[[ $luku = *[![:digit:]]* ]] && tulos="luku ei ole kokonaisluku" || tulos="luku on kokonaisluku"
# echo $tulos
} 

function TestaaOnkoLukuEtumerkillinenKokonaisluku () {
local luku 
luku=$1
 
echo "etumerkki: "$etumerkki
[[ ${luku:1} = *[![:digit:]]* ]] && tulos="luku ei ole kokonaisluku" || tulos="luku on kokonaisluku"
# echo $tulos
}  
 
function TestaaOnkoLukuReaaliluku () {
# testin aluksi varmistetaan ettei luvussa ole välilyöntiä. 
# Jos luku on pelkkä piste se ei ole reaaliluku 
# luvut jaetaan pilkkua edeltävään ja pilkun jälkeiseen osaan; jos pilkkua ei ole on menee luku LukuPilkunEdessa sisällöksi ja LukuPilkunPerassa on 0.
# jos taas pilkku on luvun alussa täytyy LukuPilkunEdessa asettaa nollaksi.
# reaaliluku on suurempi tai pienempi kuin toinen, jos pilkun etupuolen luku on suurempi tai pienempi kuin toisella.
# suurempi/pienempi testaus jälkeisille luvuille tehdään vain miksili pilkun edessä olevat luvut olivat yhtäsuuria. Ja se määrää lopputuloksen
[[ ! $1 ]] && echo 'tämä skripti kertoo onko sille syötetty parametri reaaliluku vai ei. Nyt ei parametria ole, lopetan' && sleep 6 && return 
luku=${!1}  
echo 'testaan lukua: '$luku 
etumerkki="+"; [[ ${luku:0:1} = "-" ]] && etumerkki="-" && luku=${luku:1} 
[[ ${luku:0:1} = "+" ]] && luku=${luku:1}
[[ ${luku:(-1)} = "." ]] && tulos="luku ei ole kokonaisluku" || tulos="luku on kokonaisluku" 
LukuPilkunEdessa=${luku%.*}
PilkunPaikka=${#LukuPilkunEdessa}
echo "PilkunPaikka:"$PilkunPaikka
[[ $LukuPilkunEdessa = [+-] ]] && LukuPilkunEdessa=$LukuPilkunEdessa"0"
LukuPilkunPerassa=${luku:PilkunPaikka+1} 
[[ ! $LukuPilkunEdessa ]] && LukuPilkunEdessa=0
[[ ! $LukuPilkunPerassa ]] && LukuPilkunPerassa=0
echo "LukuPilkunEdessa:"$LukuPilkunEdessa"   LukuPilkunPerassä:"$LukuPilkunPerassa 
[[ $tulos = "luku on kokonaisluku" ]] &&  TestaaOnkoLukuEtumerkillinenKokonaisluku $LukuPilkunEdessa
[[ $tulos = "luku on kokonaisluku" ]] &&  TestaaOnkoLukuEtumerkitonKokonaisluku $LukuPilkunPerassa 
[[ $tulos = "luku on kokonaisluku" ]] && echo "luku on reaaliluku" || echo "luku ei ole reaaliluku"
[[ $1 = "luku1" ]] && LukuPilkunEdessa1=$LukuPilkunEdessa && LukuPilkunPerassa1=$LukuPilkunPerassa && etumerkki1=$etumerkki && echo "LukuPilkunEdessä1: "$LukuPilkunEdessa1"   LukuPilkunPerässä1:"$LukuPilkunPerassa1"   Luvun1 etumerkki: "$etumerkki1 
[[ $1 = "luku2" ]] && LukuPilkunEdessa2=$LukuPilkunEdessa && LukuPilkunPerassa2=$LukuPilkunPerassa && etumerkki2=$etumerkki && echo "LukuPilkunEdessä2: "$LukuPilkunEdessa2"   LukuPilkunPerässä2:"$LukuPilkunPerassa2"   Luvun2 etumerkki: "$etumerkki2
echo
}

# Pääohjelma. Tätä skriptiä kutsutaan: TestaaReaalilukujenSuuruusjärjestys <luku1> <luku2>
luku1=$1
luku2=$2
TestaaOnkoLukuReaaliluku luku1 # parametrina muuttujan nimi. Toisessapäässä arvon saa: =${!1} 
TestaaOnkoLukuReaaliluku luku2
 
[[  $etumerkki1 = "-" ]] && [[ $etumerkki2 = "+" ]] && echo 'luku2 on suurempi kuin luku1' && exit
[[  $etumerkki1 = "+" ]] && [[ $etumerkki2 = "-" ]] && echo 'luku1 on suurempi kuin luku2' && exit

if [ $etumerkki1 = "+" ]; then
  [[ $LukuPilkunEdessa1 -gt $LukuPilkunEdessa2 ]] && echo 'luku1 on suurempi kuin luku2' && exit
  [[ $LukuPilkunEdessa2 -gt $LukuPilkunEdessa1 ]] && echo 'luku2 on suurempi kuin luku1' && exit

  [[ $LukuPilkunPerassa1 -gt $LukuPilkunPerassa2 ]] && echo 'luku1 on suurempi kuin luku2' && exit
  [[ $LukuPilkunPerassa2 -gt $LukuPilkunPerassa1 ]] && echo 'luku2 on suurempi kuin luku1' && exit
  else 
  [[ $LukuPilkunEdessa1 -gt $LukuPilkunEdessa2 ]] && echo 'luku2 on suurempi kuin luku1' && exit
  [[ $LukuPilkunEdessa2 -gt $LukuPilkunEdessa1 ]] && echo 'luku1 on suurempi kuin luku2' && exit

  [[ $LukuPilkunPerassa1 -gt $LukuPilkunPerassa2 ]] && echo 'luku2 on suurempi kuin luku1' && exit
  [[ $LukuPilkunPerassa2 -gt $LukuPilkunPerassa1 ]] && echo 'luku1 on suurempi kuin luku2' && exit
fi

echo 'luvut ovat yhtäsuuria'

