#!/bin/bash  
echo -en "funktiot paikasta:"$kanta/OMATSKRIPTIT/FUNKTIOKIRJASTO/Skriptiajurin_funktiot liitetään koodiin # petteriIII 1.11.2016
find ~/OMATSKRIPTIT -name "*~" -exec rm -rf {} \; # koe  onko tässä parempi 

function ToimintaValinnanPerusteella () {
  # set -f 
  [[ $ValitunTeksti = '.edellinen_kansio.' ]] && [[ $Tapahtuma = enter ]] && KansionNimi=$(dirname "$KansionNimi") && täytä_valittavat && TalletaMistäKansiostaEnsikerrallaAloitetaan 
  [[ $ValitunTeksti != '.edellinen_kansio.' ]] && $Tapahtuma  
  # set +f
} 

function SelvitäBackupTiedot () {
[[ $(ls /media/$USER | wc -l) > $(mount | grep /media | wc -l) ]] && echo kansiossa /media on jotakin vakiota. Tutki homma ja aloita uudestaan && sleep 3 && exit
echo -n backup on ajalta: $(cat /home/petteri/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/BackupPäiväykset | tail -1); [[ "$(find /media -maxdepth 4 | grep /OMATSKRIPTIT/ )" ]] || echo -n ' , eikä backupia nytkään voi tehdä sillä muistitikku ei ole kiinni'; echo ;}

function Käynnistysviesti () {
echo 'Skriptiajuri käynnistyy. Tässä koneessa on BASH:in versio: '$BASH_VERSION'.  Versio 4.0 toimii jotenkin ja ylemmät versiot kunnolla' 
apu="tämän skriptiajuri-version päiväys on (vvvv kk pp): $(stat ~/OMATSKRIPTIT/Skriptiajuri | grep Modify: | awk '{print $2}')"; echo $apu; sed -i "1s/.*/$apu/" $kanta/OMATSKRIPTIT/OHJEITA/Skriptiajuri/nappulatekniikkaa
echo 'tämän koneen käyttöjärjestelmä-versio: '$(lsb_release -a | awk '{print $2}' | tr "\n" " ")
[[ -d /sys/firmware/efi ]] && echo 'kone on bootattu UEFI-muodossa' || echo 'konetta ei ole bootattu UEFI-muodossa' ;}

function SelvitäJärjestelmänKoko () { du -b $kanta/OMATSKRIPTIT | awk '{sum += $1} END {print "OMATSKRIPTIT kansio käyttää:   " sum "  sanaa"}' ;}
   
function Osiojollaollaan { echo $( df | grep \/$ | awk '{print $1}') | sed 's,/dev/,,' ; }

function Levyjollaollaan { echo $( df | grep \/$ | awk '{print $1}') ; } 

function Tunnetutosiot { tunnetutosiot=$(blkid | awk '{print $1}' | tr -d : | sed 's,/dev/,,g'); }

function SelvitäKovalevyjenOsiointi () { echo tunnetut osiot:; lsblk -o +label,fstype,uuid; echo on bootattu osioon: $(Osiojollaollaan) ja OMATSKRIPTIT-kansio on paikassa: $kanta ; }

function lue_näppäimistöltä () { # Vastauksia voi kutsua  historiasta ja editoida.Kutsu: lue_näppäimistöltä <kysyttävän muuttujan nimi> <kysymysteksti jonka merkkivalikoimaa ei ole rajoitettu>
historiatiedosto=$kanta/"$KansionNimi"/ARKISTO/HISTORIAT/$(echo "$2" | cksum | awk '{print $1}') # tiedoston nimi on numero joka on cksum:mattu kusumys-tekstistä
[[ ! -f "$historiatiedosto" ]] && echo 'historian alku' > "$historiatiedosto"                    # kysymykselle luodaan numeron mukainen historia-tiedosto 1 kerralla 
apu=$(eval echo \$$1); apu=${2%%\\n*}; apu=${apu##*nyt: }
[[ "$apu" != $(tail -1  "$historiatiedosto") ]] &&  echo "$apu" >> "$historiatiedosto"           # kysytty arvo viedään heti historiaan josta sitä voi siis kutsua heti
echo -e "Edellisiä vastauksia voi selailla nuolinäppäimillä. Myös editointi toimii. Kirjoita vaikkei kysymysmerkkiä näykään \n"$2
HISTFILE="$historiatiedosto"
set -o history
read -e $1 # $1 on muuttujan nimi joten lause on ihan hyväksyttävä
eval echo \$$1 >>  "$historiatiedosto" # muutettu arvo menee historiatiedostoon.
HISTFILE=~/.bash_history
set -o history
}

function HaeSenRivinNumeroJollaViimeksiTyöskenneltiinTässäKansiossa () {
[[ ! -d $kanta/"$KansionNimi"/ARKISTO ]] && mkdir $kanta/"$KansionNimi"/ARKISTO # koelisäys
[[ ! -f $kanta/"$KansionNimi"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa ]] && echo 1 > $kanta/"$KansionNimi"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa  
ValitunNumero=$(cat $kanta/"$KansionNimi"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa) 
}

# function LueParametrit () { lue_näppäimistöltä Parametrit "$ValitunTeksti"" saattaa vaatia parametreja. Annapa niitä jos asiallisena pidät:"; }

function varmista_että_kovalevyn_OMATSKRIPTIT_on_uudempi_kuin_muistitikulla_oleva () {
echo varmistetaan että kovalevyn OMATSKRIPTIT on uudempi kuin muistitikulla oleva
kovalevynaika=$(stat /home/$USER/OMATSKRIPTIT --printf="%Y\n")      # aika sekunneissa Linuxin luomisesta 1.1.1970//g'
[[ -d /media/$USER/*/OMATSKRIPTIT ]] && muistitikunaika=$(stat /media/$USER/*/OMATSKRIPTIT --printf="%Y\n") || muistitikunaika=0 #touch /home/$USER/OMATSKRIPTIT tai: touch /media/$USER/*/OMATSKRIPTIT 
(( $kovalevynaika < $muistitikunaika )) && echo -e "kovalevyn OMATSKRIPTIT on vanhempi kuin muistitikulla oleva, kovalevyllä se on:\n"$(date -d@$kovalevynaika)"   ja muistitikulla:\n"$( date -d@$muistitikunaika)"  kopioi tikku kovalevylle tai jotakin." && read ;}

function orpojen_poisto () {
echo 'orpo-tiedostojen poisto'
eval apu=("$(ls $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT -Q --hide=ARKISTO)");
for (( n=0; n<${#apu[*]}; n++ ));do 
[[ ! -f $kanta/"${KansionNimi}"/"${apu[$n]}" ]] &&  echo 'poistan:'$kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"${apu[$n]}" && rm -fr  $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"${apu[$n]}"; done
eval apu=("$(ls $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT -Q --hide=ARKISTO)");
for (( n=0; n<${#apu[*]}; n++ ));do 
[[ ! -f $kanta/"${KansionNimi}"/"${apu[$n]}" ]] &&  echo 'poistan:'$kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"${apu[$n]}" && rm -fr  $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"${apu[$n]}"; done
#date >> $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/BackupPäiväykset
#for n in $(ls /media/$USER); do [[ -d /media/$USER/$n/OMATSKRIPTIT ]] &&  rsync -au ~/OMATSKRIPTIT /media/$USER/$n; done & # tämä suorittaa sen backupin.
touch ~/OMATSKRIPTIT                                               
}

function VarmistaEttäArkistotOnTehty () { 
[[ $(echo "$KansionNimi" | grep ARKISTO) ]] && return # ARKISTOssa ei arkistoida koelisäys 2.4.2005
ValitunTeksti=${ValitunTeksti:-ARKISTO}
[[ "$ValitunTeksti" = ARKISTO ]] && mkdir -p $kanta/"$KansionNimi"/"$ValitunTeksti"/ARKISTO/POISTETUT && echo 1 > $kanta/"$KansionNimi"/"$ValitunTeksti"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa && arkistoonpoikettu=$kanta/"${KansionNimi%ARKISTO*}" # && orpojen_poisto
[[ ! $( echo $kanta/"$KansionNimi"/"$ValitunTeksti" | grep ARKISTO) ]] && {
  arkistoonpoikettu='' # ARKISTOn ARKISTOa ei täytetä. koe 26.4
  mkdir -p $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti" 
  mkdir -p $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" 
  mkdir -p $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti" 
  mkdir -p $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"/DATA   
  SuurinSkriptino=0
}
[[ $Tapahtuma = f2 ]] && orpojen_poisto 
}

function TalletaSenRivinNumeroJollaNytTyöskennelläänTässäKansiossa () { 
  [[ -f $kanta/"$KansionNimi"/"$ValitunTeksti" ]] && echo $ValitunNumero > $kanta/"$KansionNimi"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa && VarmistaEttäArkistotOnTehty
  echo -n ''
}

function LueMissäOnPoikettuArkistoon () {
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/arkistoonpoikettu ]] && arkistoonpoikettu="$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/arkistoonpoikettu)" || arkistoonpoikettu=''
echo -n ''
} 

function LueMistäKansiostaAloitetaan {
[[ ! -d $kanta/OMATSKRIPTIT/ARKISTO ]] && mkdir -p $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT && KansionNimi=OMATSKRIPTIT && ValitunNumero=1  # koe 28.5.2016
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/KansionNimiAloituksessa ]] && KansionNimi="$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/KansionNimiAloituksessa)" || ( KansionNimi='OMATSKRIPTIT'; mkdir $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET; echo $KansionNimi > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/KansionNimiAloituksessa)
[[ $(echo $KansionNimi grep "OMATSKRIPTIT\/") ]] || KansionNimi='OMATSKRIPTIT' # Jotta vieraita kansioita voitaisiin tutkia muttei aloittaa niistä
}

function TalletaMistäKansiostaEnsikerrallaAloitetaan_uusi { echo OMATSKRIPTIT"${KansionNimi#*OMATSKRIPTIT}" > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/KansionNimiAloituksessa ;} # poistetaan edestä /- ja .-merkit

function TalletaMistäKansiostaEnsikerrallaAloitetaan {
apu=${KansionNimi%%[[:alnum:]]*}; KansionNimi=${KansionNimi:${#apu}} # siistitään kansionnimi alkamaan aakkosnumerolla
apu=${KansionNimi%[[:alnum:]]*}; KansionNimi=${KansionNimi:0:$((${#apu}+1))} # siistitään kansionnimi päättymään aakkosnumeroon
echo "$KansionNimi">$kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/KansionNimiAloituksessa
} # tämä korjattu versio oli jostainsyystä jäänyt pois, lisätty 26.8.2015. Muuttui taas turhaksi ?

function muuta_uusi_nimi_valituksi {
täytä_valittavat 
for (( n=1; n<=${#Valittavat[@]}; n++ )); do [[ $SkriptinNimi = "${Valittavat[n-1]}" ]] && break; done # jättääkö viimeisen matkasta ?
echo $n > $kanta/"$KansionNimi"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa 
} 

function muuttaa_osoitetun_kohdan_nimeä () { # haettu OMATSKRIPTIT2:sta
lue_näppäimistöltä  SkriptinNimi 'Nimeämisen voi tehdä ainoastaan samaan kansioon. Nimi on nyt: '"$ValitunTeksti""\nmiksi haluat muuttaa sen: "
mv $kanta/"$KansionNimi"/"$ValitunTeksti" $kanta/"$KansionNimi"/"$SkriptinNimi"
for n in DOKUMENTIT SKRIPTIT HISTORIAT; do
  mv $kanta/"$KansionNimi"/ARKISTO/"$n"/"$ValitunTeksti" $kanta/"$KansionNimi"/ARKISTO/"$n"/"$SkriptinNimi"
  [[ $n = DOKUMENTIT ]] && cat $kanta/"$KansionNimi"/ARKISTO/"$n"/"$SkriptinNimi"/"$ValitunTeksti"_dokumentti > $kanta/"$KansionNimi"/ARKISTO/"$n"/"$SkriptinNimi"/"$SkriptinNimi"_dokumentti # lisäys
done
muuta_uusi_nimi_valituksi
}

function end { # erikoistoimet 
VarmistaEttäArkistotOnTehty 
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku1 ]] && ValitunNumero=$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku1) 
avaimet="end=palaa Skriptiajuriin" # aikaisemmin oli lisäksi: delete=siirrä merkittyyn   insert=merkitse kansio"
Valittavat=( 'tehdä uutta tähän valittuun kansioon' 'poistaa valitun kohdan' 'siirtää osoitettavaan kansioon osoitettavat kansiot tai skriptit' 'muuttaa osoitetun kohdan nimeä' ' ' 'etsiä esimerkkirivejä kuinka jotakin käskyä käytetään' 'etsiä tästä kansiosta' 'etsiä tiedostosta' 'etsiä missä skripti on kun muistaa sen nimestä jotakin' 'etsiä kysyttävää ilmaisua tämän skriptin arkistosta' 'etsiä_kysyttävää_ilmaisua_OMISTASKRIPTEISTÄ' 'etsiä duplikaatit' ' ' 'rajoittaa tämän skriptin arkistossa koodien lukua' 'hexeditoida osoitettua skriptiä' 'hakea man sivun ss64 comista' 'etsiä millä man_sivuilla puhutaan siitä toiminnosta jota pitäisi käyttää' 'etsiä skriptistä kontrollimerkit' ' ' 'merkitse tämä siirrettäväksi' 'siirrä merkityt tähän kansioon')
ValitunTekstiTalteen=$ValitunTeksti
ValitseValittavistaYksi "Minkä toiminnon haluat suorittaa tälle: ""$KansionNimi"/"$ValitunTeksti" "$avaimet" 
[[ $Tapahtuma = end ]] && LopetaSkriptiJaPalaaSkriptiajuriin # muistutuksena että näin on määrätty jo funktiokutsussa
Toimi="$ValitunTeksti"
ValitunTeksti=$ValitunTekstiTalteen
echo $ValitunNumero > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku1
$(echo $Toimi  | tr ' ' _ ) # välilyönnit muutetaan alleviivauksiksi.  huomioi että tämä on funktiokutsu
LopetaSkriptiJaPalaaSkriptiajuriin # erikoistoimista palataan aina skriptiajuriin
} 

function etsiä_duplikaatit () { find ~/OMATSKRIPTIT -not -path '*/\.*' -type f 2>/dev/null  -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 66 | cut -c 35- 
   read -p 'Voit selata tekstiä hiirellä. Jatkaakseesi paina enter' ;}

function insert () { # tarkastele tuloksia
ValitunTekstiTalteen="$ValitunTeksti"
Skripti=$kanta/"$KansionNimi"/"$ValitunTeksti"
SkriptiVersiot=$kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"
SkriptinTulosteet=$kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"/DATA 
avaimet='delete=kopioi osoitetun datan muodostanut skriptiversio arkistosta käyttöön   insert=palaa skriptiajuriin   f2=poista viimeinen'
ValitunNumero=1 #${#Valittavat[@]}
while true; do  
unset Valittavat 
  apu=$ValitunTeksti
  Valittavat=($(ls -1 "$SkriptinTulosteet" | sort -V))   
  ValitseValittavistaYksi "Mitä tiedonkeräys-kerran dataa haluat tarkastella(data0 on tuorein):" "$avaimet"
  [[ $Tapahtuma = insert ]] &&  LopetaSkriptiJaPalaaSkriptiajuriin
  [[ $Tapahtuma = delete ]] && versio=$(cat $SkriptinTulosteet/"$ValitunTeksti" | head -1 | awk '{print $2}') && echo palautetaan skriptiversio:$versio && cp -vf "$SkriptiVersiot"/$versio  "$Skripti" && ValitunTeksti=$apu && LopetaSkriptiJaPalaaSkriptiajuriin
  [[ $Tapahtuma = f2 ]] && rm $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTekstiTalteen"/DATA/$(echo $(ls $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTekstiTalteen"/DATA | sort -V | tail -n 1)) && continue
  cat "$SkriptinTulosteet"/"$ValitunTeksti"
  echo ;read -p 'paina return jatkaakseesi'
done
}

function delete (){ 
arkistoonpoikettu=$kanta/"$KansionNimi"
KansionNimi="$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"
täytä_valittavat 
#SuurinDatano=$(ls $kanta/"$KansionNimi" | sort -g | tr -d [[:alpha:]] | tail -n 1)
#echo $SuurinDatano; read
#ValitunTeksti=$SuurinDatano
}

function etsiä_millä_man_sivuilla_puhutaan_siitä_toiminnosta_jota_pitäisi_käyttää () {
lue_näppäimistöltä kiinnostuksen_aihe "mistä man-sivuilla pitäisi puhua: " 
apropos $kiinnostuksen_aihe
read -p 'paina return jatkaakseesi'
}

function home () { 
unset Valittavat 
i=0; while IFS=$'\n' read -r rivi; do Valittavat[i]="${rivi}" && ((++i)) ; done < $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/Viimeksikoodatut
ValitunNumero=1
avaimet="home=palaa Skriptiajuriin"
ValitseValittavistaYksi "mihin tiedostoon haluat siirtyä näistä aikaisemmin koodatuista:" "$avaimet"
[[ $Tapahtuma = home ]] && LopetaSkriptiJaPalaaSkriptiajuriin # muistutuksena että näin on määrätty jo funktiokutsussa
KansionNimi=${ValitunTeksti%/*}
ValitunTeksti=${ValitunTeksti##*/}
SkriptinNimi=$ValitunTeksti; muuta_uusi_nimi_valituksi 
koodaa 
}

function hakea_man_sivun_ss64_comista () {
Valittavat=($(cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/käskyluettelo))
ValitseValittavistaYksi "valitse mistä käskystä haluat man-sivun"
firefox  http://ss64.com/bash/$ValitunTeksti.html 
}

function täytä_valittavat () { #find ~/OMATSKRIPTIT -name "*~" -exec rm {} \; # hidastaa tässä 
unset Valittavat; IFS=$'\n'; [[ $(echo "$KansionNimi" | grep \/ARKISTO\/) ]] && Valittavat=(.edellinen_kansio. $(ls -t $kanta/"$KansionNimi" --hide ARKISTO)) || Valittavat=(.edellinen_kansio. $(ls $kanta/"$KansionNimi" --group-directories-first --hide=*~ )); unset IFS
}

function tehdä_uutta_tähän_valittuun_kansioon () {
while true; do
  lue_näppäimistöltä UusiNimi "Uuden luomista. Pelkillä suurilla kirjaimilla kirjoitetusta nimestä tulee kansio ja yksikin pieni kirjain tekee siitä skriptin.\n- nimissä saa olla välilyöntejä ja melkein kaikkia muitakin merkkejä paitsi kauttaviiva.\n\nMikä tulee uuden kohdan nimeksi: "
  [[ ! $UusiNimi ]] && return
  [[ -f $kanta/"$KansionNimi"/"$UusiNimi" ]] && echo 'sen niminen skripti on jo, annapa uusi nimi' && sleep 2 
  [[ -d $kanta/"$KansionNimi"/"$UusiNimi" ]] && echo 'sen niminen kansio on jo, annapa uusi nimi' && sleep 2 
  [[ ! -f $kanta/"$KansionNimi"/"$UusiNimi" ]] && [[ ! -d $kanta/"$KansionNimi"/"$UusiNimi" ]] && break 
done
[[ $( echo "$UusiNimi"  | grep [[:lower:]] ) ]] && tehdä_uuden_skriptin_tähän_kansioon || tehdä_uuden_kansion_tähän_kansioon 
}

function tehdä_uuden_skriptin_tähän_kansioon () {
SkriptinNimi=$UusiNimi
mkdir -p $kanta/"$KansionNimi"/ARKISTO/{SKRIPTIT,DOKUMENTIT,HISTORIAT}/"$SkriptinNimi"
mkdir -p $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$SkriptinNimi"/DATA
ValitunTeksti="$SkriptinNimi"
[[ ! -d $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$UusiNimi" ]] && mkdir -p $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$UusiNimi"
echo -e '#!/bin/bash' > $kanta/"$KansionNimi"/"$SkriptinNimi"
f2 #gedit $kanta/"$KansionNimi"/"$SkriptinNimi"
muuta_uusi_nimi_valituksi

}

function tehdä_uuden_kansion_tähän_kansioon () { 
# merkitse_kansio # pitää lisätä koodia
UusiKansio="$UusiNimi" 
KansionNimi=$KansionNimi/$UusiKansio #; merkitsekansio
echo 'Luon kansion nimeltä: '$kanta/"$KansionNimi"' ja sille arkistot' 
mkdir -p $kanta/"$KansionNimi"/"$UusiKansio"/ARKISTO/{SKRIPTIT,DOKUMENTIT,HISTORIAT,POISTETUT}
echo 1 > $kanta/"$KansionNimi"/"$UusiKansio"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa 
UusiKansio=$kanta/"$KansionNimi"/"$UusiKansio"
}

function rajoittaa_tämän_skriptin_arkistossa_koodien_lukua {
for apu in SKRIPTIT # dokumentteja tuskin kertyy rajoitettavaksi
do
  echo -n 'ARKISTO/'$apu/"$ValitunTeksti"' tilatarve sanoja: '; (echo 0; find $kanta/"$KansionNimi"/ARKISTO/$apu/"$ValitunTeksti" -printf '%s +\n'; echo p) | dc
  SuurinDatano=$(($(ls --ignore=*'_dokumentti' $kanta/"$KansionNimi"/ARKISTO/$apu/"$ValitunTeksti" | sort -n | tail -n 1)-10))
  Pienin_numero=$(ls --ignore=*'_dokumentti' --ignore=ARKISTO $kanta/"$KansionNimi"/ARKISTO/$apu/"$ValitunTeksti" | sort -g | head -n 1)
  [[ SuurinDatano-Pienin_numero -gt 99 ]] && echo $apu'  ARKISTO-kopioiden lukumäärä: '$((SuurinDatano-Pienin_numero))'  vähennetään 99:ään' || echo 'ei vähennettävää'
  for (( n=Pienin_numero; n<=SuurinDatano-99; n++ ));do 
    [[ -f $kanta/"$KansionNimi"/ARKISTO/$apu/"$ValitunTeksti"/$n ]] && rm -f $kanta/"$KansionNimi"/ARKISTO/$apu/"$ValitunTeksti"/$n
  done
done
read -p 'paina enter jatkaakseesi'
}

function poistaa_valitun_kohdan () {
echo "poistettava:$kanta/"$KansionNimi"/"$ValitunTekstiTalteen" löytyy linuxin roskakorista. Paina enter jatkaakseesi"; read
mv $kanta/"$KansionNimi"/"$ValitunTekstiTalteen" ~/.local/share/Trash/files # siirretään skripti elikä kansio roskikseen ja ARKISTOt jätetään
echo '[Trash Info]' > ~/.local/share/Trash/info/"$ValitunTekstiTalteen.trashinfo"                # info echo:t ovat palautusta varten
echo 'Path='$kanta/"$KansionNimi"/"$ValitunTekstiTalteen" >> ~/.local/share/Trash/info/"$ValitunTekstiTalteen.trashinfo" 
echo 'DeletionDate='$(date) >> ~/.local/share/Trash/info/"$ValitunTekstiTalteen.trashinfo" 
rm -R $kanta/"$KansionNimi"/ARKISTO/{SKRIPTIT,DOKUMENTIT,HISTORIAT}/"$ValitunTekstiTalteen"
}

function merkitse_tämä_siirrettäväksi () {
echo $kanta/"$KansionNimi"/"$ValitunTeksti" >> $kanta/.fifo
# echo $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti" >> $kanta/.fifo
# echo $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" >> $kanta/.fifo
# echo $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti" >> $kanta/.fifo
}

function siirrä_merkityt_tähän_kansioon () {
[[ -f $kanta/.fifo ]] && apu=$(head -n 1 $kanta/.fifo) || ( echo ei ole siirrettävää && sleep 2 && return ) #; [[ ! -f "$apu" ]] && rm $kanta/.fifo && echo ei ole siirrettävää && sleep 2 && return
while [[ $(grep -o / ~/.fifo) ]]; do
#until $(cat -b ~/.fifo) > 1 ; do 
# $(cat -b $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe) < 1 ]]
  apu=$(head -n 1 $kanta/.fifo); sed -i '1d' $kanta/.fifo
  apuu="$( basename "$apu")"; apuuu="$( dirname "$apu")"
  [[ -d  "$apu" ]] && echo kansio: "$apu" siirretään paikkaan: $kanta/"$KansionNimi"/"$apuu" && mv -u "$apu" $kanta/"$KansionNimi"/"$apuu" && return 
  mv -u "$apu" $kanta/"$KansionNimi"/"$apuu"
  mv -u "$apuuu"/ARKISTO/SKRIPTIT/"$apuu" $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$apuu"
  mv -u "$apuuu"/ARKISTO/DOKUMENTIT/"$apuu" $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$apuu"
  mv -u "$apuuu"/ARKISTO/HISTORIAT/"$apuu" $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$apuu"
done
}

function siirtää_osoitettavaan_kansioon_osoitettavat_kansiot_tai_skriptit () { # siirtää_osoitettavaan_kansioon_osoitettavat_kansiot_tai_skriptit 
KansioJohonSiirretaan="$KansionNimi" 
avaimet="valitse kansio johon siirretään ja paina f3 kun olet siinä kansiossa     f2=palaa Skriptiajuriin"
while true
do 
  täytä_valittavat
  ValitseValittavistaYksi "Nyt ollaan kansiossa: ""$KansionNimi" "$avaimet"  # 1 valinta
  [[ $Tapahtuma = f3 ]] && break
  [[ $Tapahtuma = f2 ]] && return
  [[ $ValitunTeksti = ".edellinen_kansio." ]] && KansioJohonSiirretaan=$(dirname "$KansioJohonSiirretaan") && KansionNimi="$KansioJohonSiirretaan"
  [[ -d "$KansionNimi"/"$ValitunTeksti" ]] && KansioJohonSiirretaan="$KansioJohonSiirretaan"/"$ValitunTeksti" && KansionNimi="$KansioJohonSiirretaan" 
done
KansionNimi='OMATSKRIPTIT'
avaimet="f3=takaisin skriptiajuriin   f4=siirrä tämä"
while true
do 
  täytä_valittavat 
  ValitseValittavistaYksi "Valittu siirretään painettaessa f4 kansioon:""$KansioJohonSiirretaan" "$avaimet"
  [[ $ValitunTeksti = '.edellinen kansio.' ]] && KansionNimi=$(dirname "$KansionNimi") && continue 
  [[ $Tapahtuma = f3 ]] && return
  [[ $Tapahtuma = 'enter' ]] && [[ -d $kanta/"$KansionNimi"/"$ValitunTeksti" ]] && KansionNimi=/"$KansionNimi"/"$ValitunTeksti" 
  [[ $Tapahtuma = f4 ]] && {
  [[ -d $kanta/"$KansionNimi"/"$ValitunTeksti" ]] &&  mv -u $kanta/"$KansionNimi"/"$ValitunTeksti"  "$KansioJohonSiirretaan"/"$ValitunTeksti" && continue
    mv -u $kanta/"$KansionNimi"/"$ValitunTeksti"  "$KansioJohonSiirretaan"/"$ValitunTeksti"
    mv -u $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"  "$KansioJohonSiirretaan"/ARKISTO/SKRIPTIT/"$ValitunTeksti" # arkistot siirretään myös
    mv -u $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"  "$KansioJohonSiirretaan"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" 
    mv -u $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"  "$KansioJohonSiirretaan"/ARKISTO/HISTORIAT/"$ValitunTeksti"    
                           }
done
}

function MikäliLöytyiFunktioNiinLisääSeSkriptiin () { # tämä funktio lisää ajettavaan skriptiin sen tarvitsemia funktioita.
[[ ! -f delme ]] && return
cat $kanta/"$KansionNimi"/"$ValitunTeksti" | sed '1!d' > ~/delme1
cat ~/delme >> ~/delme1
cat $kanta/"$KansionNimi"/"$ValitunTeksti" | sed '1d' >> ~/delme1
cat delme1 > $kanta/"$KansionNimi"/"$ValitunTeksti"
echo "funktio on lisätty skriptiisi. Saattaa viedä monta kierrosta ennenkuin kaikki funktiot on ladattu."
rm -f delme delme1
}

function LisääkoodattavaViimeksiKoodatuihinJaPoistaToisinnot () { # kirjoitetaan tiedoston ensimmäiseksi riviksi, rajoitetaan kokoa ja poistetaan duplikaatit
echo "$KansionNimi"/"$ValitunTeksti" > /tmp/delme; 
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/Viimeksikoodatut ]] && cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/Viimeksikoodatut | head -n 40 | awk '!x[$0]++' >> /tmp/delme
cp /tmp/delme $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/Viimeksikoodatut
}

function f2 { # koodaa 197
[[ -d $kanta/"$KansionNimi"/"$ValitunTeksti" ]] && echo kansiota ei voi koodata. Valinta siirtyy takaisin tiedoston kohdalle && read -p 'paina enter' && continue
LisääkoodattavaViimeksiKoodatuihinJaPoistaToisinnot
[[ $(echo "$KansionNimi" | grep ARKISTO) ]] && apu="${KansionNimi%ARKISTO*}""${KansionNimi##*\/}" && gedit $kanta/"$KansionNimi"'/'"$ValitunTeksti" "$apu" && continue # toimia ARKISTOssa ei arkistoida 
[[ ! -f $kanta/"$KansionNimi"/'ARKISTO/SKRIPTIT/'"$ValitunTeksti"/1 ]] && cp $kanta/"$KansionNimi"/"$ValitunTeksti"  $kanta/"$KansionNimi"/'ARKISTO/SKRIPTIT'/"$ValitunTeksti"'/'1

SuurinDatano=$(ls $kanta/"$KansionNimi"/'ARKISTO/SKRIPTIT/'"$ValitunTeksti" | sort -g | tr -d [[:alpha:]] | tail -n 1) #; echo $SuurinDatano; read 
koodattavat=$kanta/\'"$KansionNimi"\'/\'"$ValitunTeksti"\' 
for n in $(ls --hide=ARKISTO --hide=0 --hide=^[[:alpha:]] $kanta/"$KansionNimi"/'ARKISTO/SKRIPTIT/'"$ValitunTeksti" | sort -g | tail -n 6); do koodattavat="$koodattavat"' '$kanta/\'"$KansionNimi"\'/'ARKISTO/SKRIPTIT/'\'"$ValitunTeksti"\'/$n; done 
## laheta kirjasto-funktion kopio arkistoon mikäli kirjastoa kutsutaan 
[[ ! -f $kanta/"$KansionNimi"/Skriptiajurin_funktiot ]] && funktiokirjasto=$(grep  FUNKTIOKIRJASTO $kanta/"$KansionNimi"'/'"$ValitunTeksti" | grep -v ARKISTO | awk {'print $2'}  | tr "\n" "  " ) || funktiokirjasto='' 
[[ "$KansionNimi" = OMATSKRIPTIT/FUNKTIOKIRJASTO ]] && funktiokirjasto='' # funktiokirjastossa ei liitetä toisia kirjastoja
[[ $funktiokirjasto ]] && koodattavat="$koodattavat"' '"$funktiokirjasto"; echo # lisää kirjastot editoitaviin

apuu=$(cat $kanta/"$KansionNimi"/"$ValitunTeksti" | awk '{print $1}'); [[ $(echo ${apuu:2:5}) = "/bin/" ]] && bash -n $kanta/"$KansionNimi"/"$ValitunTeksti" &>$kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe
[[ -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe ]] && [[ $(cat -b $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe) < 1 ]] && rm -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe 
[[ -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe ]] && koodattavat="$koodattavat"" "$kanta/\'"$KansionNimi"\'/ARKISTO/SKRIPTIT/\'"$ValitunTeksti"\'/virhe
eval gedit $koodattavat $(find ~/OMATSKRIPTIT/OHJEITA/PIKAVALITTAVAT -maxdepth 1 -type f -readable | sed 's/^ */"/g;s/ *$/"/g')
wait $! # $!=edellisen prosessin PID. Wait odottaa prosessin PID loppumista. 
[[ -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe ]] && rm -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe 
MikäliMikäänOnMuuttunutNiinTalletaVanhaVersio
}

function MikäliMikäänOnMuuttunutNiinTalletaVanhaVersio () {
DIFF=$( diff -q $kanta/"$KansionNimi"/"$ValitunTeksti"  $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/$SuurinDatano )
#[[ ! -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"'/'$SuurinDatano* ]] && cp $kanta/"$KansionNimi"/"$ValitunTeksti"  $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"'/'1 #$((${SuurinDatano:-1}+1)) 
[[ ! "$DIFF" ]] && return 
echo kopioin: $kanta/"$KansionNimi"/"$ValitunTeksti"" -> " $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"'/'1
cp $kanta/"$KansionNimi"/"$ValitunTeksti" $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"'/'$(($SuurinDatano+1)) 
date >> $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/BackupPäiväykset
for n in $(ls /media/$USER); do [[ -d /media/$USER/$n/OMATSKRIPTIT ]] &&  rsync -au ~/OMATSKRIPTIT /media/$USER/$n; done & # tämä suorittaa sen backupin.
} 

function f4 { # dokumentoi  
rm -f $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/"$ValitunTeksti"_dokumentti~
[[ $(echo "$KansionNimi"/"$ValitunTeksti" | grep ARKISTO) ]] && gedit $kanta/OMATSKRIPTIT/ARKISTO/DOKUMENTIT/ARKISTO/ARKISTO_dokumentti && continue # ARKISTOssa ei arkistoida
[[ ! -f $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/"$ValitunTeksti"'_dokumentti' ]] && touch $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/"$ValitunTeksti"'_dokumentti' # koe
[[ -d "$KansionNimi"/"$ValitunTeksti" ]] && echo 'kansion dokumentti' && sleep .1
[[ ! -d $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" ]] && mkdir -p $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" 
[[ ! -f $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/0 ]] && touch $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/0
SuurinDokuno=$(ls --hide="$ValitunTeksti"'_dokumentti' $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" | sort -g | tail -n 1)
apu=''
for n in $(ls --hide=*_dokumentti --hide=0 $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" | sort -g | tail -n 6); do  apu="$apu"$kanta"/"\'"$KansionNimi"\'/ARKISTO/DOKUMENTIT/\'"$ValitunTeksti"\'/$n' '; done 
eval gedit -- $kanta/\'"$KansionNimi"\'/ARKISTO/DOKUMENTIT/\'"$ValitunTeksti"\'/\'"$ValitunTeksti"\'_dokumentti\  "$apu" $kanta/\'"$KansionNimi"\'/\'"$ValitunTeksti"\'
wait $! # $!=edellisen prosessin PID. Wait odottaa prosessin PID loppumista. 
DIFF=$(diff $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/"$ValitunTeksti"_dokumentti  $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/$SuurinDokuno ) 
[[ "$DIFF" != "" ]] && cp $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/"$ValitunTeksti"'_dokumentti'  $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/$(($SuurinDokuno+1))
#reset;  
}

function hexeditoida_osoitettua_skriptiä { bless $kanta/"$KansionNimi"/"$ValitunTekstiTalteen"; }  

function etsiä_missä_skripti_on_kun_muistaa_sen_nimestä_jotakin () { 
avaimet='end=palaa Skriptiajuriin' 
while true 
do
  clear; cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/grepin_määreet; echo; echo 
  lue_näppäimistöltä hakusana "mitä ilmausta etsit kansioiden tai skriptien nimistä (teksti voi olla keskelläkin sanaa)?"
  eval Valittavat=(" "$(find $kanta/OMATSKRIPTIT |  grep -i "$hakusana" | grep -v /ARKISTO/ | grep -v .*~ | sed 's/^ */"/g;s/ *$/"/g')) 
  ValitunNumero=$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2) 
  ValitseValittavistaYksi "ilmaus löytyi näiden skriptien nimistä: valitse editoitava näpäyttämällä sitä enter sen kohdalla." "$avaimet" 
  [[ $Tapahtuma = "end" ]] && break 
  [[ $Tapahtuma = "enter" ]] && {
KansionNimi=${ValitunTeksti##*$USER\/}; KansionNimi=${KansionNimi%/*}; ValitunTeksti="${ValitunTeksti##*/}"       
koodaa
TalletaMistäKansiostaEnsikerrallaAloitetaan
break                       ;}
done 
echo $ValitunNumero > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2  
} 

#function etsiä_kysyttävää_ilmaisua_historiasta () {


function etsiä_kysyttävää_ilmaisua_OMISTASKRIPTEISTÄ { # etsiä_näistä, -v ?
clear; cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/grepin_määreet; echo 
lue_näppäimistöltä hakusana "mitä ilmausta etsit kaikista omista skripteistä ?"
optiot="-lr"; [[ ${hakusana:0:3} = '-i ' ]]  && optiot=${hakusana%% *}lr && hakusana=${hakusana#* } 
[[ ${hakusana:0:3} = '-E ' ]]  && optiot=${hakusana%% *}lr && hakusana=${hakusana#* }  
IFS=$'\n' Valittavat=($(grep $optiot "$hakusana" $kanta/OMATSKRIPTIT | grep -v /ARKISTO/ )); unset IFS #| sed 's/ *$/\n/g' )); unset IFS #| grep -v kopio | sed 's/^ */"/g;s/ *$/"/g'  ))
for (( n=0; n<=${#Valittavat[@]}-1 ; n++ )); do Valittavat[$n]=${Valittavat[$n]##*OMATSKRIPTIT\/}; done
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2 ]] && ValitunNumero=$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2) 
while true
do 
  avaimet='end=palaa Skriptiajuriin  home=palaa Skriptiajuriin valittu valittuna'
  ValitseValittavistaYksi "ilmaus:$hakusana löytyi näistä skripteistä: valitse editoitava tiedosto nuolinäppäimillä ja paina enter" "$avaimet"  
  [[ $Tapahtuma = "end" ]] && break  
  [[ $Tapahtuma = "home" ]] && KansionNimi=OMATSKRIPTIT/${ValitunTeksti%/*} && ValitunTeksti=${ValitunTeksti##*/} && TalletaMistäKansiostaEnsikerrallaAloitetaan && break # koe2  
  # siis on painettu enter. #gedit  $kanta/OMATSKRIPTIT/"$ValitunTeksti" 
  grep --color -E "$hakusana|$"  $kanta/OMATSKRIPTIT/"$ValitunTeksti"
  read
done 
echo $ValitunNumero > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2 
}

function etsiä_kysyttävää_ilmaisua_tämän_skriptin_arkistosta { # etsiä_näistä, -v ?
clear; cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/grepin_määreet; echo 
lue_näppäimistöltä hakusana "mitä ilmausta etsit tämän skriptin arkistosta ?"
optiot="-lr"; [[ ${hakusana:0:3} = '-i ' ]]  && optiot=${hakusana%% *}lr && hakusana=${hakusana#* } 
[[ ${hakusana:0:3} = '-E ' ]]  && optiot=${hakusana%% *}lr && hakusana=${hakusana#* } 
Valittavat=($(grep $optiot "$hakusana" $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$VanhaValitunTeksti" | sort -V )) #| sed 's/^ */"/g;s/ *$/"/g'  )) onko oikein
for (( n=0; n<=${#Valittavat[@]}-1 ; n++ )); do Valittavat[$n]=${Valittavat[$n]##*"$KansionNimi"/ARKISTO/SKRIPTIT/"$VanhaValitunTeksti"\/}; done
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2 ]] && ValitunNumero=$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2) 
while true
do 
  avaimet='end=palaa Skriptiajuriin'
  ValitseValittavistaYksi "ilmaus löytyi näistä skripteistä: valitse editoitava nuolinäppäimillä ja paina enter" "$avaimet"  
  [[ $Tapahtuma = "end" ]] && break  
  gedit  $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$VanhaValitunTeksti"/"$ValitunTeksti" 
done 
echo $ValitunNumero > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2 
}

function etsiä_tästä_kansiosta { # etsitään siitä kansiosta jossa ollaan
clear; cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/grepin_määreet; echo 
lue_näppäimistöltä hakusana "mitä ilmausta etsit kansiosta: "$KansionNimi" ?"
optiot="-lr"; [[ ${hakusana:0:3} = '-i ' ]]  && optiot=${hakusana%% *}lr && hakusana=${hakusana#* } 
[[ ${hakusana:0:3} = '-E ' ]]  && optiot=${hakusana%% *}lr && hakusana=${hakusana#* }  
IFS=$'\n' Valittavat=($(grep $optiot "$hakusana" $kanta/"$KansionNimi" | grep -v /ARKISTO/ )); unset IFS #| sed 's/ *$/\n/g' )); unset IFS #| grep -v kopio | sed 's/^ */"/g;s/ *$/"/g'  ))
for (( n=0; n<=${#Valittavat[@]}-1 ; n++ )); do Valittavat[$n]=${Valittavat[$n]##*OMATSKRIPTIT\/}; done
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2 ]] && ValitunNumero=$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2) 
while true
do 
  avaimet='end=palaa Skriptiajuriin  home=palaa Skriptiajuriin valittu valittuna'
  ValitseValittavistaYksi "ilmaus löytyi näistä skripteistä: valitse editoitava tiedosto nuolinäppäimillä ja paina enter" "$avaimet"  
  [[ $Tapahtuma = "end" ]] && break  
  [[ $Tapahtuma = "home" ]] && KansionNimi=OMATSKRIPTIT/${ValitunTeksti%/*} && ValitunTeksti=${ValitunTeksti##*/} && TalletaMistäKansiostaEnsikerrallaAloitetaan && break # koe2  
  # siis on painettu enter. #gedit  $kanta/OMATSKRIPTIT/"$ValitunTeksti" 
  grep --color -E "$hakusana|$"  $kanta/OMATSKRIPTIT/"$ValitunTeksti"
  read
done 
echo $ValitunNumero > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2 
}

function etsiä_esimerkkirivejä_kuinka_jotakin_käskyä_käytetään { # 370
clear; cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/grepin_määreet; echo; echo 
lue_näppäimistöltä hakusana "millaisia esimerkkirivejä etsit kaikista omista skripteistä ?"
find ~/OMATSKRIPTIT ! -path '*ARKISTO*' ! -path *sgml -type f  -exec grep "$hakusana" {} \; > /tmp/delmee; awk '{$1=$1} !x[$0]++' /tmp/delmee;
grep -n "$hakusana" ~/.bash_history  > /tmp/delmee; sed 's/[0-9]*\:/\n/g' /tmp/delmee #; awk '{$1=$1} !x[$0]++' /tmp/delmee; 
read -p 'hiirellä voi vieritää näyttöä. paina enter jatkaakseesi'
}

function etsiä_tiedostosta { # 370
avaimet="f2=kirjoita tiedostonimi, end=palaa Skriptiajuriin"
ValitunNumero=$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/valitun_numero) 
Valittavat=($(cat  $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/valittavat_tiedostonimet)) # lue valittavat levyltä    
ValitseValittavistaYksi "Mitä tiedostoa haluat tarkistella:" "$avaimet"
[[ $Tapahtuma = end ]] &&  LopetaSkriptiJaPalaaSkriptiajuriin
[[ $Tapahtuma = f2 ]]  && ( lue_näppäimistöltä editoitavatiedosto; echo  ${Valittavat[@]}" "$editoitavatiedosto > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/valittavat_tiedostonimet  ) || editoitavatiedosto=$ValitunTeksti
echo $ValitunNumero > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/valitun_numero
clear; cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/grepin_määreet; echo; echo 
lue_näppäimistöltä hakusana "millaisia esimerkkirivejä etsit tiedostosta .bash_history ?"
clear
# echo grep -n "$hakusana" "$editoitavatiedosto"; read
grep -n "$hakusana" $editoitavatiedosto  > /tmp/delmee; sed 's/[0-9]*\:/\n/g' /tmp/delmee #; awk '{$1=$1} !x[$0]++' /tmp/delmee; 
read -p 'hiirellä voi vieritää näyttöä. paina enter jatkaakseesi'
}

function f3 { # lukea_ohjeita. kaikki ohjekansion tiedostot luetaan. Tiedostoja voi lisätä tai poistaa ja Skriptiajuri ottaa muutoksen automaattisesti huomioon.
#apu="$(find $kanta/OMATSKRIPTIT/OHJEITA/Skriptiajuri -maxdepth 1 -type f -regextype posix-extended -regex "[^0-9]*")" 
gedit $kanta/OMATSKRIPTIT/OHJEITA/Skriptiajuri/nappulatekniikkaa $kanta/OMATSKRIPTIT/OHJEITA/Skriptiajuri/* 
} 

function enter { # ajaa_valitun_skriptin 
[[ -d $kanta/"$KansionNimi"/"$ValitunTeksti" ]] && KansionNimi="$KansionNimi"/"$ValitunTeksti" && täytä_valittavat && return # kansion muutos
bash -n $kanta/"$KansionNimi"/"$ValitunTeksti" &>/tmp/virhe; [[ $( cat /tmp/virhe) ]] && echo 'tulkkauskelvoton, mennään koodaamaan' && sleep 1 && f2 # mene editoriin jos koodissa on virhe uusikoe
[[ $( cat /tmp/virhe) ]] && return
[[ $(echo "$ValitunTeksti" | grep -e '.PDF' -e '.pdf') ]] && evince $kanta/"$KansionNimi"/"$ValitunTeksti" && return 
[[ $(echo "$ValitunTeksti" | grep -e '\.doc' -e .html -e .odt -e .sgml -e .xml) ]] && /usr/bin/libreoffice $kanta/"$KansionNimi"/"$ValitunTeksti" && return # poistot löytyy 39:stä  
clear && echo -n 'suoritan skriptin: '$kanta/"$KansionNimi"/$ValitunTeksti' klo:' && date | awk '{print $3}' && echo &&  time . $kanta/"$KansionNimi"/"$ValitunTeksti" > >(tee /tmp/tuloste) && read -p 'jatkaakseesi paina enter' || ( echo "skriptisi päätyi virheeseen virhe-statuksella: "$? ; read -p "jatkaakseesi paina enter"; $kanta/OMATSKRIPTIT/"Skriptiajuri" )          
Siirrä_datatiedostot_pois_alta_ja_talleta_data0
[[ -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe ]] && rm $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe 
MikäliLöytyiFunktioNiinLisääSeSkriptiin ;}

function Siirrä_datatiedostot_pois_alta_ja_talleta_data0 {
SuurinSkriptino=$(ls $kanta/"$KansionNimi"/'ARKISTO/SKRIPTIT/'"$ValitunTeksti" | sort -g | tr -d [[:alpha:]] | tail -n 1)
SuurinDatano=$(($(ls -1 $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"/DATA | grep data.*[0-9]* | grep -o [0-9].* | sort -g | tail -n 1))); for (( n=SuurinDatano; n>-1; n-- )) do mv  $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"/DATA/data$n  $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"/DATA/data$((n+1));done
echo $SuurinSkriptino" "$SuurinDatano #koe
cat <(echo tulos_saatu_skriptiversiolla:" "$SuurinSkriptino"  hetki jolloin se on tulostettu: "$(date)) /tmp/tuloste > $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"/DATA/data0
echo ajokerta:" "$SuurinDatano"  hetki jolloin se on tulostettu: "$(date) ;}

# function virhe () { echo -n 'virherivi: '; caller; read ;}

function command_not_found_handle () { # tätä funktiota kutsutaan kun käyttöjärjestelmästä puuttuu paketti tai funktio johon viitataan.
clear;echo -n 'virherivi: '; caller 
komennon_nimi="$1" 
[[ $( apt-cache show "$komennon_nimi" | grep "Package:" ) ]] && { echo 'Koneessasi ei ole toimintoon tarvittavaa pakettia nimeltään:'$komennon_nimi'. Sen hakemiseksi tarvitsen salasanasi. Toiminnon jälkeen aja käsky uudelleen'; sudo apt-get install "$komennon_nimi"; exit; } 
rm -f delme
for n in "$(ls --hide=ARKISTO ~/OMATSKRIPTIT/FUNKTIOKIRJASTO)"; do
apu="$(grep -n "function $komennon_nimi" ~/OMATSKRIPTIT/FUNKTIOKIRJASTO/"$n")"; alku="${apu%%:*}"
apu="$(grep -n "function" ~/OMATSKRIPTIT/FUNKTIOKIRJASTO/"$n" | grep -A 1 $alku: | sed 2q | grep -v $alku:)"; loppu="${apu%%:*}"
[[ "$apu" ]] && eval cat ~/OMATSKRIPTIT/FUNKTIOKIRJASTO/"$n" | sed $alku','$((loppu-1))'!d' > delme
done
[[ -f delme ]] && echo 'funktio '$komennon_nimi' löytyi ja se on nyt tiedostossa: delme' 
exit # pitäisikö olla return tai poistaa kokonaan
}

function toimivatko_skriptiajurin_funktiot () { echo " Skriptiajurin_funktiot toimivat" | tee -a /tmp/skriptiajuri ;}

 


 

