Tattis vastauksesta, tuskinpa tuota kerkiää testaamaan ja kunnossahan se varmaan jo onkin; käytän grepiä aika paljon ja olen aina ihmetellyt kuinka niin nopeasti voi etsiä.
**
Harmittaa kuinka arvostetuillakin nettisivuilla morkataan BASH:ia. Tekeytyvät BASH:ille "ystävällisiksi" mutta käyttävät vanhuuttaan kelvottomia toteutuksia ja yleistävät tulokset koskemaan koko BASHia. Menettäneet kehittymiskykynsä ja toimivat joo-joo-miehinä.
Esimerkiksi BASH:in matemaattiset ominaisuudet - ei niitä oikeastaan ole joten kuinka niitä voi morkata? Morkkaajat eivät kykene edes bc:stä tekemään kunnollista. Kyvyttömät, eivät ne osaa tehdä muuta kuin repiä.
Matematiikkaa komentorivillä:
----------------------------------------
Jos kopioit kaikki funktiot foorumilta kirjoituksesta:
http://forum.ubuntu-fi.org/index.php?topic=303.msg306401#msg306401 johonkin tiedostoon koneessasi ja annat käskyn:
gedit ~/.bashrc ja kirjoitat avautuvan tiedoston viimeiseksi riviksi: . polku_lataamaasi_tiedostoon niin saat talletettuasi tiedoston ja bootattuasi päätteessä käyttöösi seuraavaa:
Voit kirjoittaa komentoriville minkätahansa laskun esimerkiksi: 2.5+2.5 tai: round[log[.11e2-2*sin+30]+ln[e^[round[16*[sin30*cos60]]]]] ja enterin painamisen jälkeen kone kertoo oikean tuloksen; tässätapauksessa 5 eikä turhia perä-nollia esitetä vaikka onkin laskettu 60 desimaalia.
- komentorivin muu toiminta ei muutu ja käskyjä voi käyttää skripteissäkin.
- sallitut operaattorit: +, -, *, /, ^, %. Mikäli laskussa on operaattori / täytyy laskun eteen kirjoittaa sana: laske tai BASH tulkitsee laskun kansioksi.
- parametrittömät funktiot : pi, e, #, asteet, radiaanit (lyhenne rad), round
- yksiparametriset funktiot: sin, cos, tan, atn, sqrt, log, ln, exp, abs, int, kertoma, kymppiin, kahteen (kantalukumuunnokset), desimaalit (lyhenne des)
- kaksiparametriset funktiot: power
- uusia funktioita voi tehdä; myös moni-parametrisia voi tehdä mutta mallia ei ole joten mukavaa pähkäilyä.
- kun laskuja suoritututtaa skripteistä käsin saa laskun tuloksen muuttujasta $(tulo); esimerkiksi: 2*2; sqrt$(tulo)
- myös summaus-vähennystapa: +arvo tunnetaan. Tulkinta: lisää/vähennä siitä mikä edellisen laskun tulos oli.
- suluilla on niiden normaali merkitys. Suluiksi kelpaavat kuitenkin vain hakasulut.
- # on kommenttimerkki. Esimerkiksi ohjelmalle voidaan antaa laskettavaksi tiedoston. Tiedoston jokaisen rivin perään voi kirjoittaa kommentin. Kommentti alkaa merkillä #.
- power on desimaalisten eksponenttien laskemiseksi, esimerkiksi: power3^0.5
- desimaaleja on 60 ja trigonometria suoritetaan asteissa ellei toisin määrätä, esimerkikssi: laske des256radsin.5235988 . Määrättävä desimaalimäärä kuitenkin ilmoittaa bc:lle vain millätarkkuudella laskenta tulee vähitään suorittaa: jos jossakussa laskuun menevässä on enemmän desimaaleja niin desimaaliluku otetaan siitä. Asetukset säilyvät kunnes ne muutetaan noilla käskyillä tai bootataan.
- lukujen kokonaisosa huomioidaan kokoajan kokonaan onpa siinä kuinka monta numeroa hyvänsä. Ja mikäli ei erikseen määrätä niin ohjelman laskenta suoritetaan 66 desimaalin tarkkuudella ja tulostus tapahtuu toistaiseksi samalla tarkkuudella. Desimaalien lukumäärällä ei ole rajaa.
- tämä ohjelma käyttää laskuissaan matematiikka-ohjelmaa nimeltään bc. Matriisilaskuihin soveltuu paremmin awk joka osaa tekstinkäsittelyäkin.
- laskutusta voi ylläpitää tekstinkäsittely-järjestelmässä ja tulostaa laskutus-tiedostot laskuina. Vaikka tämä toimikin kokeissa niin kannattaa alkuun suhtautua erittäin varoen.
- siirrettäessä skripti toiseen koneeseen tai uuteen Linuxiin kannattaa skriptin toimivuus testata päässä-laskettavalx=2; laske $(echo [e^x-e^-x]/2 | sed "s/x/$x/g" | awk '{print $1}' )la mutta koneelle vaikeasti laskettavalla laskulla, esimerkiksi: round[log[.11e2-2*sin+30]+ln[e^[round[16*[sin30*cos60]]]]] - tuloksen pitää olla 5 eikä siinä ei saa olla desimaaleja eikä laskuista saa tulla huomautuksia (warning).
- sevitys round:in toimintaan: laskettaessa jotakin jonka arvo on päättymätön numerosarja sattaa tuloksen viimeinen numero olla yksinkertaisissakin tapauksissa virheellinen yhdellä. Kun useammat pikkuvirheet kertautuvat saattaakin lopputuloksen useampikin viimeinen numero olla väärin. Käytettäessä laskemiseen bc:tä lasketaankin esimerkiksi kymmenen desimaalia enemmän kuin tarpeen olisi, hylätään yhdeksän viimeistä ja pyöristetään lopputulos kymmenennellä - toiminta on vähän hitaampaa mutta tulos varmasti oikea ja näyttävä - mitä siitä että se on matemaattisessa mielessä hölmöä.
- mikäli matematiikka suoritetaan eksponenttiluvuilla ei matematiikka voi olla tarkkaa. Tämä ei tarkoita ettei ohjelma saa hyväksyä eksponentti-muodossa olevia eikä sitäkään että ohjelma ei saisi esittää tuloksia eksponenttimuodossa. Tuntuu muuten siltä, että exel käyttää bc:tä - ja koska hyökkäys on paras puolustus niin Microsoft syyttää Linuxia.
- toiminta on hidasta niinkuin exel-tyyppisissä yleensäkin. Mutta tulokset ovat oikeita silloinkin kun muuten saa pelkkää virhettä.
- lähes kaikilla funktioilla on monia mahdollisia laskutapoja elikä korvaus-funktioita: esimerkiksi sinhx voidaan laskea kaavasta: [e^x-e^-x]/2 . Tässä skriptissä merkintätapa on:
x=2; laske $(echo [e^x-e^-x]/2 | sed "s/x/$x/g" | awk '{print $1}' ) ; kaikki muu on siis vakiota paitsi x=???.
Sinh:in merkityksestä: hämähäkki kutoo verkkonsa aivoihinsa koodattujen sinh-taulukoiden mukaan, rakennuksien kestävyyslaskelmat tarvitsee sinh-funktioita - vaikka mitkä laskelmat tarvitsee myös sinh:iä.
- bc ei tunne desimaalisia eksponentteja. Niille ei taidakaan olla laskukaavaa, vaan ne täytyy laskea iteroimalla. Laskusta tuleekin vielä hitaampi kuin bc:llä normaalisti. Mutta lohdutusta saa siitä että rajoittamaton tarkkuuskin on tärkeämpää kuin normaalisti: tarkkoja desimaali-exponentteja on vaikea kehittää: exelistähänSuomalaiset sivut loistivat: ohjeet vain hieman epämääräiset, mutta esimerkiksi yksi arvovaltainen kansainvälinen sivu neuvoi tyyliin: miksi tehdä helposti kun voi tehdä vaikeastikin. niitä saa niinkuin taskukalkulaattoristakin, mutta tarkkuus on niillä huono.
Itseasiassa Linuxin työkalut myös matemaattisiin tehtäviin ovat erinomaiset. Mutta me kaikki olemme Wintoosan pilaamia ja yritykset toimia sillä tavalla kuin Wintoosa opettaa ovat epäonnistumaan tuomittuja. Lisäksi Linuxin merkintätavat ovat pitkiä ja ennenkaikkea täysin mahdottomia muistaa.
- esimerkiksi missä muussa kielessä voi tehdä matemaattisia vertailuja rajoittamattoman suurille, pienille ja pitkille numeroille? Vertailu täytyy ehdottomasti tehdä bc:n sisällä.
- bc: tä käytetäänkin lähes kaikkiin matemaattisiin ongelmiin; Linuxin omat matematiikka-käskyt opetellaan vain jotta saataisiin kielestä mielikuva.
- bc laskee ihan kiltisti myös negatiiviset desimaali-potenssit ilman kikkailua. Ongelmaksi kylläkin muodostui se ettei yksinkertaisillekaan laskuille riittänyt bc:n oletus-tarkkuus: 66-desimaalin tarkkuus.
Tämä alkoi käydä mielenkiintoiseksi, sillä seuraava aste on enää toteutusta vaille ja sillä onnistuisi jo vähän edistyneempikin matikka - jaa, matriisi-matikkaa on jossakin. Mutta tarkoitus olisi siirtyä toteuttamaan kunnollisia kovalevy-funktioita: toimimattoman käyttöjärjestelmän päivitys ja muuta semmoista.
Kovalevy_funktiot onkin ensialkuun toteutettu itsenäisenä skriptinä jossa on myös versio hiiri_funktioista. Noviiseille tarkoitettu kovalevyn automaattinen korjaus ja boottauskykyiseksi tekeminen on jo tehty ja parhaillaan pähkäilen ammattikäyttöön tarkoitetun version kanssa.
- matematiikka toimii Trusty Tahrissa
btrfs toi taas kerran esiin tarpeen grubin editoimiseen:
Grubin "editointi" grub.cfg:ssä ehdotetulla tavalla
-----------------------------------------------------------------
Ubuntu 13.10:n grub on kelvoton sillä varsinkin käytettäessä kokeellisia menetelmiä grubista pitää ehdottomasti näkyä mikä Ubuntun versio ja millä varusteilla on käytössä.
Samoin pankkiin ei pitäisi mennä saastuneella koneella, ja sen varmistamiseksi pankki-Ubuntun on syytä olla USB-tikulla joka on koneessa kiinni vain käytettäessä pankki-yhteyttä. (mikäli käyt internetissä niin koneesi voi olla saastunut. Pankki-sivuilla käynti on varsin turvallista.)
Myöskin käsiteltäessä sellaista jonka sekoittaminen mukuloiden toimesta on syytä estää täytyy tehdä sille tehtävälle oma ubuntu ja suojata grubin se kohta omalla salasanallaan jotta sitä ei voisi muuttaa.
- painotan siis: tämä on kehittäjien suosittelema keino, eikä tässä editoida grub.cfg:tä vaan sen aputiedostoa.
- Ubuntun kehittäjät tarjoavat tällaisen "staattisen valikon" tekemiseksi monia helpotuksia - esimerkiksi kuinka staattinen valikko saadaan ottamaan huomioon kerneleiden muuttumiseen päivitettäessä..
- tämä editoitu grub säilyy useimmiten myös asennettaessa uusi käyttöjärjestelmä. Jos asennetaan Windows niin alkulataaja täytyy omia takaisin.
- koodi on sivulla:
http://forum.ubuntu-fi.org/index.php?topic=30413.0**
Jonkunsortin käsky kerrallaan askellus BASH-skripteille:
Tarkistettavan kohdan eteen kirjoitetaan koodiin rivi : set -x; trap "echo paina return;read x" DEBUG
Tarkistettanan kohdan perään kirjoitetaan koodiin rivi: set +x; trap "" DEBUG
- voihan siihen lisätä sillähetkellä tärkeiden muuttujien tulostusta ja sensemmoista.
- tämä trace-hommahan on parempi kuin muilla kielillä. Näennäisesti se on susi sillä kukaan ei ole vaivautunut selvittämään sitä vaan tiedot löytyvät vain man-sivujen sokkeloista. Ja tällähetkellä minä en jaksa hommaa selvittää.