51
Ohjelmointi, palvelimet ja muu edistyneempi käyttö / Vs: Ohjeita shell-skriptaukseen (bash)
« Uusin viesti kirjoittanut petteriIII 27.02.26 - klo:11.47 »Kun luvuista tekee exponentti-esityksen on mahdollista suorittaa kertominen riippumatta lukujen arvosta - kunhan ottaa laskuissa huomioon eksponentit. Eksponentti-esitykseen muutamisestakin kannattaa tehdä vanhoja käskyjä käyttävä versio sillä se on paljon nopeampi. Ja sen tulee käyttää sitä mitä muissa kielissä kutsutaan nimellä: parametrien palauttaminen.
Toiminta on muuntamisessa täysin erilainem riippuen siitä millaisen luvun se saa.
1. 0.0000123 = ennen ensimmästä välillä 1-9 olevaa numeroa olevat ja siitä pilkun jälkeen olevien nollien ja muiden numeroiden lukumäärä on negatiivinen eksponentti ja pilkun voi sijoittaa tulosta kirjoitettaessa heti ensimmäisen numeron perään.
2. 123000000 = eksponentti on numeroiden lukumäärä -1 ja pilkun voi sijoittaa tulosta kirjoitetaesa heti ensimmäisen nunmeron perään
kumpi tapa on kyseessä päätellään siitä alkaako luku nollalla, desimaali-pisteellä vaiko nuemrolla väliltä 1-9. Tehdäänpä esimerkki:
# tarkistuksia - leikkaa-liimaa kaikki lauseet kerralla päätteeseen.
kultapuppeli=0.0000123; to_exp kultapuppeli; echo $kultapuppeli
kultapuppeli=-.000012300; to_exp kultapuppeli; echo $kultapuppeli
kultapuppeli=-.000012300; to_exp kultapuppeli; echo $kultapuppeli
kultapuppeli=.12300; to_exp kultapuppeli; echo $kultapuppeli
halinalle=12300057; to_exp halinalle; echo $halinalle
halinalle=-12.30005700; to_exp halinalle; echo $halinalle
halinalle=.30005700; to_exp halinalle; echo $halinalle
halinalle=+12.30005700; to_exp halinalle; echo $halinalle
halinalle=012.30005700; to_exp halinalle; echo $halinalle
- BASH siis opettaa skriptaamaan - mutta useimmillehan se ei merkitse mitään sillä mitäänhän ei enää tehdä itse - ja koeta sitä aitoa iloa jonka onnistuminen aiheuttaa.
- mutta itseasiassa BASH ennenkaikkea opettaa mistä niitä matoja kannattaa etsiä kaupallisista tuotteista - elikä kuinka varmistaa laatu.
- funktion ja pääohjelman muistit ovat siis yhteiset ja kummassavaan muuttujan asettaminen kajahtaa toisen saman nimiseen muuttujaan. Mutta käskyllä : apu=$(declare -p $1) muuttujan apu nimi säilyy ja se saa vain ne arvot jotka muuttujalla $1 on. Jos siis apu-nimisen muuttujan arvoja muutellaan funktiossa niin se muuttaa apu-nimisen muuttujan arvoja pääohjelmassa. Jos funktiossa aseteltaisiin muuttuja $1 niin arvot kyllä palautuisivat oikeaan paikkaa muutta käsky $1= ei toimi, vaan se vaatii omaa ojelmaa: joko read<<< , let tai export. Koska näin monet ohjelmat toimivat niin kyllä siitäkin voi päätellä että aina on tiedetty nimi-parametrien toimivan.
Toiminta on muuntamisessa täysin erilainem riippuen siitä millaisen luvun se saa.
1. 0.0000123 = ennen ensimmästä välillä 1-9 olevaa numeroa olevat ja siitä pilkun jälkeen olevien nollien ja muiden numeroiden lukumäärä on negatiivinen eksponentti ja pilkun voi sijoittaa tulosta kirjoitettaessa heti ensimmäisen numeron perään.
2. 123000000 = eksponentti on numeroiden lukumäärä -1 ja pilkun voi sijoittaa tulosta kirjoitetaesa heti ensimmäisen nunmeron perään
kumpi tapa on kyseessä päätellään siitä alkaako luku nollalla, desimaali-pisteellä vaiko nuemrolla väliltä 1-9. Tehdäänpä esimerkki:
Koodia: [Valitse]
function to_exp () { apu=$(declare -p $1); apu=${apu#*=}; apu=${apu//\"/}; apu=${apu/\+/}; apu=${apu#0}; merkki=''; [[ ${apu:0:1} = - ]] && { merkki=- ; apu=${apu:1} ;}; [[ ${apu:0:1} = 0 || ${apu:0:1} = . ]] && { apu=${apu%%+(0)};exp=${apu%%[1-9]*}; exp=${exp#*.}; exp=$((-1*${#exp}-1)); apu=${apu##+(0)}; apu=${apu#.}; export $1=$merkki${apu:0:1}.${apu:1}e$exp $1 ;} || { apu2=${apu%.*}; exp=$((${#apu2}-1)); apu2=${apu/./}; apu=${apu#.}; export $1=$merkki${apu2:0:1}.${apu2:1}e$exp ;} ;}
# tarkistuksia - leikkaa-liimaa kaikki lauseet kerralla päätteeseen.
kultapuppeli=0.0000123; to_exp kultapuppeli; echo $kultapuppeli
kultapuppeli=-.000012300; to_exp kultapuppeli; echo $kultapuppeli
kultapuppeli=-.000012300; to_exp kultapuppeli; echo $kultapuppeli
kultapuppeli=.12300; to_exp kultapuppeli; echo $kultapuppeli
halinalle=12300057; to_exp halinalle; echo $halinalle
halinalle=-12.30005700; to_exp halinalle; echo $halinalle
halinalle=.30005700; to_exp halinalle; echo $halinalle
halinalle=+12.30005700; to_exp halinalle; echo $halinalle
halinalle=012.30005700; to_exp halinalle; echo $halinalle
- BASH siis opettaa skriptaamaan - mutta useimmillehan se ei merkitse mitään sillä mitäänhän ei enää tehdä itse - ja koeta sitä aitoa iloa jonka onnistuminen aiheuttaa.
- mutta itseasiassa BASH ennenkaikkea opettaa mistä niitä matoja kannattaa etsiä kaupallisista tuotteista - elikä kuinka varmistaa laatu.
- funktion ja pääohjelman muistit ovat siis yhteiset ja kummassavaan muuttujan asettaminen kajahtaa toisen saman nimiseen muuttujaan. Mutta käskyllä : apu=$(declare -p $1) muuttujan apu nimi säilyy ja se saa vain ne arvot jotka muuttujalla $1 on. Jos siis apu-nimisen muuttujan arvoja muutellaan funktiossa niin se muuttaa apu-nimisen muuttujan arvoja pääohjelmassa. Jos funktiossa aseteltaisiin muuttuja $1 niin arvot kyllä palautuisivat oikeaan paikkaa muutta käsky $1= ei toimi, vaan se vaatii omaa ojelmaa: joko read<<< , let tai export. Koska näin monet ohjelmat toimivat niin kyllä siitäkin voi päätellä että aina on tiedetty nimi-parametrien toimivan.

Tuoreimmat viestit
).
Itse sottasin Kubuntun mäkeen ja pistin Arch:in tilalle
