#!/bin/bash 
# Tee funktio, joka poistaa kansiosta /media muistitikun labelilla olevat kansiot

clear; echo -e 'näitä kovalevy_funktioita kutsuttiin ohjelmasta: '$0'\njos salasanaa kysytään nyt, niin sitä kysytään siksi ettei sitten toiminnan aikana kysyttäisi keskenkaiken.\n'; sudo echo
# kun nämä kirjastofunktiot liittää johonkin skiptiin kysytään salasanaa heti kun skriptin suoritus alkaa
 
function NimeaJaKunnostaTikunValittuOsio { # jos osiolla on ennestään nimi niin se vaan nimetään uudestaan vanhalla nimellä. Omistusoikeus palautetaan käyttäjälle ja roskikset tyhjennetään. Alustamaton muistitikku alustetaan.
# onko mieltä tarkistaa ettei samannimisiä tikkuja tule useampia? Kun UUID:t kuitenkin ovat erilaisia? petteriIII  22.12.2010
for osio in `sudo fdisk -l | grep /dev/ | grep -v sivutus | grep -v swap | grep -v tavua | grep -v bytes | awk '{print $1}'`
do  
  if [ "`sudo blkid -o value -s UUID $osio`" = "$valittu" ]; then
    sudo chown $nimi:$nimi /media/$valittu 
    test -d /media/$valittu/.Trash* && echo 'poistan muistitikun roskikset' && sudo rm -R /media/$valittu/.Trash*
    echo 'olen kunnostanut muistitikun ja poistanut roskiksen paikasta: /media/'$valittu
    echo 'tämänjälkeen laitettaessa muistitikku USB-liittimeen sen kuvake ilmestyy työpöydälle nimellä:'$nimi'_tikku samoinkuin kansio nimeltään:'$nimi'_tikku ilmestyy kansioon /media'
    test "`sudo fdisk -l | grep $osio | grep FAT`" && sudo dosfslabel $osio ${nimi:0:7}'_MT' 
    test "`sudo fdisk -l | grep $osio | grep NTFS`" && sudo umount $osio && sudo ntfslabel $osio $nimi'_NTFS' && read apuu 
    test "`sudo fdisk -l | grep $osio | grep Linux`" && sudo tune2fs -L $nimi'_tikku' $osio 
  fi
done
testaaTikku
echo 'Irroita muistitikku.'
}

function testaaTikku () {
for apu in  `sudo mount | grep sdb  | awk '{print $1}'`; do
  aaa=`sudo mount | grep $apu | grep fuseblk`
  sudo umount -l $apu
  echo -e '\ntestaan osion: '$apu'//'$aaa 
  test "$aaa" && echo '****** jos muistitikun tämän osion tarkistuksessa tulostuu virheitä vaatii tämä osio Windowsia ******' && sudo ntfsfix $apu  || sudo fsck -MVfa $apu  
done
}

function PoistaTyhjatKansiotKansiostaMedia {   
for apu in `ls /media`; do test ! -s /media/$apu && sudo rmdir /media/$apu; done
}

function EtsiTikkuJaTeeTikunOsioistaValittavienJoukko {
sudo clear
nimi=`whoami`
test ! -d /tmp/$nimi'_tikku' && sudo mkdir /tmp/$nimi'_tikku' && sudo chown $nimi:$nimi /tmp/$nimi'_tikku'
read -p 'Ota tikku irti jos se on kiinni ja jokatapauksessa paina ENTER' apu
PoistaTyhjatKansiotKansiostaMedia # joskus myös aiheuttaa virheitä, syytä kommentoida ?
ls /media >/tmp/$nimi'_tikku'/ls_tikkuirti
# tehtävä funktio UudelleenNimeaKaikkiKansiossaMedia : jos kansiossa /media on kansioita ovat ne todennäköisesti jäänteitä siitä kun tikku on revitty irti ilman lupaa. Sekä kansiot että tiedostot on kuitenkin syytä nimetä uudestaan ja kertoa mille nimelle ne on nimetty uudestaan.
ls /dev > /tmp/$nimi'_tikku'/devit_tikkuirti
read -p 'Työnnä tikku liittimeensä ja odota 10 sekuntia. Jos näyttö muuttuu niin tupla-näpäytä hiirellä alarivistä sanaa Terminal. Jokatapauksessa paina sitten enter' apu # tikun osiot automounttautuvat kansioon:/media ja lisäksi niiden nimet/UUID:t näkyvät työpöydällä 
ls /media >/tmp/$nimi'_tikku'/ls_tikkuliitettyna
ls /dev > /tmp/$nimi'_tikku'/devit_tikkuliitettyna
MaaritaTikunLaitenimi
test ! `sudo fdisk -l /dev/$Tikun_laitenimi | grep "$Tikun_laitenimi"1` && AlustaMuistitikku 
MuodostaTikunOsioistaValittavienJoukko
}
 
function AlustaMuistitikku() {
# keskeneräinen
Valittavat=('ext4' 'FAT' 'NTFS')
ValitseValittavistaYksi "Tikkusi on alustamaton. Mihin muotoon haluat tikkusi alustaa?" 
echo -e '\nTikkusi laitenimi on:'$Tikun_laitenimi ' se alustetaan kokonaisuudessaan muotoon: '$valittu'\n'; read -p 'jatkaakseesi paina enter' apu
test "$valittu"="ext4" && sudo sfdisk  /dev/$Tikun_laitenimi << EOF
,,L
EOF
sudo dd if=/dev/zero of=/dev/$Tikun_laitenimi'1' bs=512 count=1 && sudo mke2fs -t ext4 /dev/$Tikun_laitenimi'1'
exit
}

function MuodostaTikunOsioistaValittavienJoukko {
seuraava=''
UUIDtaiLabeleidenluku=0
Valittavat=() # TyhjennaValittavat # unset Valittavat olisi parempi ?
for UUIDtaiLabel in `diff  /tmp/$nimi'_tikku'/ls_tikkuirti /tmp/$nimi'_tikku'/ls_tikkuliitettyna`
do
  test $seuraava && test $UUIDtaiLabel != ">" && Valittavat[UUIDtaiLabeleidenluku]=$UUIDtaiLabel && let UUIDtaiLabeleidenluku++ && seuraava=""
  test ! $seuraava && test "$UUIDtaiLabel" = ">" && seuraava=1 
done
}
 
function MaaritaTikunLaitenimi {
for apu in `diff  /tmp/$nimi'_tikku'/devit_tikkuirti /tmp/$nimi'_tikku'/devit_tikkuliitettyna`
do
  test `echo $apu | grep sd` && test `expr index "$apu" 123567890\>` = 0 && Tikun_laitenimi=${apu:0:3} && echo 'tikun laitenimi='${apu:0:3} # laitenimeä tarvitaan alustettaessa tikkua.      
done
}
 
