#!/bin/bash
# tätä skriptiä kutsutaan: <polku>TestaaOnkoReaaliluku <testattava luku>       11.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 ensimmainenmerkki loputmerkit
luku=$1
ensimmainenmerkki=${luku:0:1}; [[ $ensimmainenmerkki = "[+-0123456789]" ]] && apu='' || apu="luku ei ole kokonaisluku"
echo "ensimmäinen merkki:"$ensimmainenmerkki
loputmerkit=${luku:1}
[[ ${luku:1} = *[![:digit:]]* ]] && tulos="luku ei ole kokonaisluku" || tulos="luku on kokonaisluku"
echo $tulos
}  
 
function JaaLukuPilkkuaEdeltavaanJaSeuraavaanOsaan     () {
# 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
#let luku=$(luku$1) # ei toimi
[[ $1 = 1 ]] && luku=$luku1
[[ $1 = 2 ]] && luku=$luku2
echo 'testataan lukua: '$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
[[ ${luku:0:1} = "-" ]] && LukuPilkunPerassa="-"$LukuPilkunPerassa 
echo "LukuPilkunEdessa:"$LukuPilkunEdessa"   LukuPilkunPerässä:"$LukuPilkunPerassa 
[[ $tulos = "luku on kokonaisluku" ]] &&  TestaaOnkoLukuEtumerkillinenKokonaisluku $LukuPilkunEdessa
[[ $tulos = "luku on kokonaisluku" ]] &&  TestaaOnkoLukuEtumerkillinenKokonaisluku $LukuPilkunPerassa 
[[ $tulos = "luku on kokonaisluku" ]] && echo "luku on reaaliluku" || echo "luku ei ole reaaliluku"
#let LukuPilkunEdessa$1=$LukuPilkunEdessa && let LukuPilkunPerassa$1=$LukuPilkunPerassa # toimii
[[ $1 = 1 ]] && LukuPilkunEdessa1=$LukuPilkunEdessa && LukuPilkunPerassa1=$LukuPilkunPerassa
[[ $1 = 2 ]] && LukuPilkunEdessa2=$LukuPilkunEdessa && LukuPilkunPerassa2=$LukuPilkunPerassa
echo
}

# Pääohjelma. Tätä skriptiä kutsutaan: TestaaReaalilukujenSuuruusjärjestys <luku1> <luku2>
luku1=$1
luku2=$2
JaaLukuPilkkuaEdeltavaanJaSeuraavaanOsaan     1
JaaLukuPilkkuaEdeltavaanJaSeuraavaanOsaan     2

[[ "$LukuPilkunEdessa1" -gt "$LukuPilkunEdessa2" ]] && echo 'vertailun tulos: luku1 on suurempi kuin luku2' && exit
[[ "$LukuPilkunEdessa2" -gt "$LukuPilkunEdessa1" ]] && echo 'vertailun tulos: luku2 on suurempi kuin luku1' && exit

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

echo 'vertailun tulos: luvut ovat yhtäsuuria'

