# bash -x <skripti polkuineen> kertoo vähän missä mennään
# funktiot saa liitettyä käskyllä: . <funktioiden tiedosto polkuineen>


function EtsiOsioJollaOllaan {
# Selvitetään millä osiolla ollaan. Kovalevyn MBR:llä on osoitin joka osoittaa osiota jolta tullaan boottaamaan ja se vaihtuu joskus päivityksen yhteydessä. Siksi PC:n sammutus-rutiinissa käsketään: 'sudo grub-install /dev/<osion laitekuvaaja, esimerkiksi sda>' jolloin MBR:n osoitin muuttuu osoittamaan tämänhetkistä osiota.
apu=`cat /etc/mtab | grep ' / ' | awk '{print $1}'`
loppu=`echo ${apu: -7}`
osion_alku=`expr index "$loppu" s`
OsioJollaOllaan=${loppu:$osion_alku-1:5} # vaatii laittamista: 4->6 ja loppuvälilyöntien strippaus
if [ "${OsioJollaOllaan:4}" = " " ]; then OsioJollaOllaan=${OsioJollaOllaan:0:4} ; fi
#test ! $OsioJollaOllaan && OsioJollaOllaan=$apu
}

function Maarita_ekanUbuntunOsio {
# Jos on editoitu aikaisemmin luetaan ekanUbuntunOsio ja jos ei ole editoitu niin asetetaan ekanUbuntunOsio viittaamaan ensimmäiseen kelvolliseen osioon.
for osio in `sudo fdisk -l | grep /dev/ | grep Linux | grep -v sivutus | grep -v swap | grep -v tavua | grep -v bytes | awk '{print $1}'`
do
  sudo mount $osio /mnt
  if [ -d /mnt/boot/grub ]; then
    test ! $ekanUbuntunOsio && ekanUbuntunOsio=${osio:5}
    test -f /mnt/Alkuvalikko/ekanUbuntunOsio && ekanUbuntunOsio=`cat /mnt/Alkuvalikko/ekanUbuntunOsio` && boottiennen=`sudo cat /mnt/Alkuvalikko/boottauslevy`
    test -f /mnt/home/Alkuvalikko/ekanUbuntunOsio && ekanUbuntunOsio=`cat /mnt/home/Alkuvalikko/ekanUbuntunOsio` && boottiennen=`sudo cat /mnt/home/Alkuvalikko/boottauslevy`
  fi
  sudo umount /mnt
done
}

function AsetaOsiotaulussaEkanUbuntunOsionBootFlag {
echo 'ekanUbuntunOsio='$ekanUbuntunOsio
test $ekanUbuntunOsio && sudo parted /dev/${ekanUbuntunOsio:0:3} set ${ekanUbuntunOsio:3} boot on  # kokeellinen
}

function AsetaKovalevynMBRViittaamaan_ekanUbuntunOsioon {
test $boottiennen && echo 'tiedoksi: aikoinaan BIOS:issa oli boottauslevynä:'$boottiennen
echo 'kirjoitetaan MBR:lle osoitin osioon:'$ekanUbuntunOsio'  Kestää puoli minuuttia'
sudo mount /dev/$ekanUbuntunOsio /mnt
sudo mount -t sysfs none /mnt/sys
sudo mount -t proc none /mnt/proc
sudo mount --bind /dev/ /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
test -d /etc/resolv.conf && sudo mount -o bind /etc/resolv.conf /mnt/etc/resolv.conf
sudo grub-install --root-directory=/mnt /dev/${ekanUbuntunOsio:0:3} #'(hd0)'  #
read -p 'luettuasi paina enter' apu
}

function paivita {
test "$ekanUbuntunOsio" = "$OsioJollaOllaan" && paivitaSuoraan || paivitaMountattuOsio
}

function paivitaMountattuOsio {
# päivittää /mnt:lle mountatun osion
if [ "`netstat --statistics | grep "total packets received" | awk '{print $1}'`" = "2" ]; then 
  echo -e '\nPäivitystä ei voi tehdä kosko verkko ei toimi. Kokeile kuitenkin jos toimii jo nyt ja jos ei toimi vielä niin etsi sitten verkko'  
  else
  echo 'vain 32bittisellä bootattuna voi päivittää 32bittisen ja vain 64bittisellä bootattuna voi päivittää 64bittisen.'
  test ! -d /lib64 && test ! -d /mnt/lib64 && sudo chroot /mnt apt-get update && sudo chroot /mnt apt-get dist-upgrade  
  test -d /lib64 &&function ratkaise_power () { # desimaaliset eksponentit ratkaistan täällä; esimerkiksi: 3^.5
lause=$1; erota_funktion_parametri $(echo $lause | grep -Pow '(?:power.*)') ; echo $numero"^"${matriisi[1]%?}
power $numero $(${matriisi[1]%?})
korvattava="power"$numero"\^"${matriisi[1]%?}; tulos=$(echo $tulos | sed "s/$korvattava/$iteroitava/g")
} 

function power () {
kantaluku=$1    
exponentti=$2 
iteroitava=$(echo "scale=$desimaaleja ; $kantaluku/2" | bc -l | tr -d '\\' | tr -d "\n" ) # iterointi alkaa tästä luvusta
delta=$(echo "scale=$desimaaleja ; $iteroitava/2" | bc -l | tr -d '\\' | tr -d "\n" )
hakuarvo=$(echo "scale=$desimaaleja ; $exponentti*l($kantaluku)" | bc -l | tr -d '\\' | tr -d "\n") # ln(x) iteroidaan tätä lukua kohden
for (( n=1; n<=2*$desimaaleja; n++ )); do 
  [[ "$(echo "scale=$desimaaleja ; l($iteroitava)" '>' $hakuarvo | bc -l | tr -d '\\' | tr -d "\n")" -eq 1 ]] && iteroitava=$(echo "$iteroitava-$delta" | bc | tr -d '\\' | tr -d "\n" ) || iteroitava=$(echo "$iteroitava+$delta" | bc -l | tr -d '\\' | tr -d "\n" )
  delta=$(echo "scale=$desimaaleja ; $delta/2" | bc -l | tr -d '\\' | tr -d "\n" )
  echo -n " iterointikierros:"$n  
done
echo; tulosta $iteroitava
} test -d /mnt/lib64  && sudo chroot /mnt apt-get update && sudo chroot /mnt apt-get dist-upgrade  
fi
}

function paivitaSuoraan {
if [ "`netstat --statistics | grep "total packets received" | awk '{print $1}'`" = "2" ]; then 
  echo -e '\nPäivitystä ei voi tehdä kosko verkko ei toimi. Kokeile kuitenkin jos toimii jo nyt ja jos ei toimi vielä niin etsi sitten verkko'  
  else
  sudo aptitude update  
  sudo aptitude safe-upgrade  
fi
}

function unmountmnt {
if [ -f delme ]; then sudo rm delme; fi
sudo echo 'poistetaan /mnt:n mountit:'
echo `sudo mount | grep /mnt | awk '{print $3}'` | sudo tee delme
mountatut=`sudo cat delme`' '
mountattujenluku=`wc -w delme | awk '{print $1}'`
sudo rm delmefunction ratkaise_power () { # desimaaliset eksponentit ratkaistan täällä; esimerkiksi: 3^.5
lause=$1; erota_funktion_parametri $(echo $lause | grep -Pow '(?:power.*)') ; echo $numero"^"${matriisi[1]%?}
power $numero $(${matriisi[1]%?})
korvattava="power"$numero"\^"${matriisi[1]%?}; tulos=$(echo $tulos | sed "s/$korvattava/$iteroitava/g")
} 

function iterointi () {  # Matemaattiset_funktiot ARKISTO 318
kantaluku=$1    
exponentti=$2 
iteroitava=$(echo "scale=$desimaaleja ; $kantaluku/2" | bc -l | tr -d '\\' | tr -d "\n" ) # iterointi alkaa tästä luvusta
delta=$(echo "scale=$desimaaleja ; $iteroitava/2" | bc -l | tr -d '\\' | tr -d "\n" )
hakuarvo=$(echo "scale=$desimaaleja ; $exponentti*l($kantaluku)" | bc -l | tr -d '\\' | tr -d "\n") # ln(x) iteroidaan tätä lukua kohden
for (( n=1; n<=2*$desimaaleja; n++ )); do 
  [[ "$(echo "scale=$desimaaleja ; l($iteroitava)" '>' $hakuarvo | bc -l | tr -d '\\' | tr -d "\n")" -eq 1 ]] && iteroitava=$(echo "$iteroitava-$delta" | bc | tr -d '\\' | tr -d "\n" ) || iteroitava=$(echo "$iteroitava+$delta" | bc -l | tr -d '\\' | tr -d "\n" )
  delta=$(echo "scale=$desimaaleja ; $delta/2" | bc -l | tr -d '\\' | tr -d "\n" )
  echo -n " iterointikierros:"$n  
done
echo; tulosta $iteroitava
}

for ((i=1;i<=$mountattujenluku;i+=1)); do
  laitetunnuksenloppu=`expr index "$mountatut" " "`
  if [ -f delme$i ]; then sudo rm delme$i; fi
  echo ${mountatut:0:(($laitetunnuksenloppu-1))} | sudo tee delme$i  
  mountatut=${mountatut:$laitetunnuksenloppu}
done
for ((i=1;i<=$mountattujenluku;i+=1)); do 
  cat delme$(($mountattujenluku-$i+1))
  sudo umount `cat delme$(($mountattujenluku-$i+1))`
  sudo rm delme$(($mountattujenluku-$i+1))
done
echo '/mnt:n mountit on poistettu'
}
