#!/bin/basḧ́

function TestaaOnkoLukuEtumerkitonInteger () {
local luku
luku=$1
[[ $luku = *[![:digit:]]* ]] && tulos="luku ei ole integer" || tulos="luku on integer"
echo $tulos
} 

function TestaaOnkoLukuEtumerkillinenInteger () {
local luku ensimmainenmerkki loputmerkit
luku=$1
ensimmainenmerkki=${luku:0:1}; [[ $ensimmainenmerkki = "[+-0123456789]" ]] && apu='' || apu="luku ei ole integer"
echo "ensimmäinen merkki:"$ensimmainenmerkki
loputmerkit=${luku:1}
[[ ${luku:1} = *[![:digit:]]* ]] && tulos="luku ei ole integer" || tulos="luku on integer"
echo $tulos
}  
 
function TestaaOnkoLukuReaaliluku () {
# tätä skriptiä kutsutaan: <polku>TestaaOnkoReaaliluku <testattava luku>                                11.4.2011 petteriIII
# 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
[[ $2 ]] && echo -n "luvussa on välilyönti, onkohan se tarkoitus? Mutta luku:"$1" "$2" ei ole reaaliluku" && return 
luku=$1 
[[ ${luku:(-1)} = "." ]] && tulos="luku ei ole integer" || tulos="luku on integer" 
LukuPilkunEdessa=${luku%.*}
PilkunPaikka=${#LukuPilkunEdessa}
echo "PilkunPaikka:"$PilkunPaikka
[[ $LukuPilkunEdessa = [+-] ]] && LukuPilkunEdessa=$LukuPilkunEdessa"0"
LukuPilkunPerassa=${luku:PilkunPaikka+1} # +1}
[[ ! $LukuPilkunEdessa ]] && LukuPilkunEdessa=0
#[[ ! $LukuPilkunPerassa ]] && LukuPilkunPerassa=0
[[ ${luku:0:1} = "-" ]] && LukuPilkunPerassa="-"$LukuPilkunPerassa 
echo "LukuPilkunEdessa:"$LukuPilkunEdessa"   LukuPilkunPerassä:"$LukuPilkunPerassa 
[[ $tulos = "luku on integer" ]] &&  TestaaOnkoLukuEtumerkillinenInteger $LukuPilkunEdessa
[[ $tulos = "luku on integer" ]] &&  TestaaOnkoLukuEtumerkillinenInteger $LukuPilkunPerassa 
[[ $tulos = "luku on integer" ]] && echo "luku on reaaliluku" || echo "luku ei ole reaaliluku"
}

# Pääohjelma. Tätä skriptiä kutsutaan: TestaaReaalilukujenSuuruusjärjestys <luku1> <luku2>
kanta=$(dirname $(dirname $0)); echo 'tätä skriptiä ajetaan paikasta:'$kanta
# testausta varten . $kanta'/FUNKTIOKIRJASTO/Matemaattiset_funktiot' # Matemaattiset_funktiot liitetään tämän skriptin koodiin
luku1=$1
luku2=$2
TestaaOnkoLukuReaaliluku $luku1
LukuPilkunEdessa1=$LukuPilkunEdessa
LukuPilkunPerassa1=$LukuPilkunPerassa
 
TestaaOnkoLukuReaaliluku $luku2
LukuPilkunEdessa2=$LukuPilkunEdessa
LukuPilkunPerassa2=$LukuPilkunPerassa

echo "LukuPilkunEdessä1: "$LukuPilkunEdessa1"   LukuPilkunPerässä1:"$LukuPilkunPerassa1 
echo "LukuPilkunEdessä2: "$LukuPilkunEdessa2"   LukuPilkunPerässä2:"$LukuPilkunPerassa2

[[ $LukuPilkunEdessa1 -gt $LukuPilkunEdessa2 ]] && echo 'luku1 on suurempi kuin luku2' && exit
# jos -gt_n tilalle laittaisi merkin > niin lukujen etumerkkiä ei huomioitaisi
[[ $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

echo 'luvut ovat yhtäsuuria'

