Ero sivun ”Bash-skriptaus” versioiden välillä

Siirry navigaatioon Siirry hakuun
21 merkkiä lisätty ,  3. elokuuta 2018
ei muokkausyhteenvetoa
Ei muokkausyhteenvetoa
(5 välissä olevaa versiota 2 käyttäjän tekeminä ei näytetä)
Rivi 15: Rivi 15:
#!/bin/bash
#!/bin/bash
echo "Hei, $(whoami), mitä kuuluu"
echo "Hei, $(whoami), mitä kuuluu"
echo "Olet hakemistossa $PWD, tiedostolistaus:"
echo "Olet hakemistossa $(pwd), tiedostolistaus:"
ls
ls
</source>
</source>
Rivi 155: Rivi 155:


<source lang="bash">
<source lang="bash">
for muuttuja in `ls`  
for muuttuja in `ls`  
do
do
  echo $muuttuja
    echo $muuttuja
done
done
</source>
</source>
Silmukassa suoritettavat rivit laitetaan siis sanojen <tt>do</tt> ja <tt>done</tt> väliin. Laskurimuuttujaan sijoitetaan vuorotellen <tt>in</tt>:n jälkeen olevat sanat, esimerkiksi tässä tapauksessa komennon [[ls]] tuloste (eli hakemistossa olevien tiedostojen nimet). Ohjelman tuloste voidaan merkitä myös seuraavasti: <tt>$(komento)</tt>. Jos silmukalla on käytävä läpi kaikki kokonaisluvut tietyltä väliltä, voi käyttää komentoa [[seq]], joka tulostaa kokonaisluvut väliltä 1-annettu parametri. Esimerkiksi
Silmukassa suoritettavat rivit laitetaan siis sanojen <tt>do</tt> ja <tt>done</tt> väliin. Laskurimuuttujaan sijoitetaan vuorotellen <tt>in</tt>:n jälkeen olevat sanat, esimerkiksi tässä tapauksessa komennon [[ls]] tuloste (eli hakemistossa olevien tiedostojen nimet). Ohjelman tuloste voidaan merkitä myös seuraavasti: <tt>$(komento)</tt>. Jos silmukalla on käytävä läpi kaikki kokonaisluvut tietyltä väliltä, voi käyttää komentoa [[seq]], joka tulostaa kokonaisluvut väliltä 1-annettu parametri. Esimerkiksi
<source lang="bash">
<source lang="bash">
echo "Lasketaan kymmeneen:"
echo "Lasketaan kymmeneen:"
for luku in $(seq 10)
for luku in $(seq 10)
do
do
  echo $luku
    echo $luku
done
done
</source>
</source>


Läpi käytävä joukko voidaan merkitä myös syntaksilla <tt>{alku..loppu}</tt>. Jos esimerkiksi halutaan käydä läpi kaikki merkit c-o, kokeile vaikka kirjoittaa
Läpi käytävä joukko voidaan merkitä myös syntaksilla <tt>{alku..loppu}</tt>. Jos esimerkiksi halutaan käydä läpi kaikki merkit c-o, kokeile vaikka kirjoittaa
for muuttuja in {c..o}; { echo -n "$muuttuja "; sleep 1;}
<source lang="bash">for muuttuja in {c..o}; { echo -n "$muuttuja "; sleep 1;}</source>


=== While ===
=== While ===
While suorittaa lausekkeita niin kauan kuin ehto on tosi. Kun ehto on epätosi poistutaan loopista jolloin skriptin suoritus jatkuu seuraavalta loogiselta riviltä (while-lausekkeen jälkeiseltä riviltä).
While suorittaa lausekkeita niin kauan kuin ehto on tosi. Kun ehto on epätosi poistutaan loopista jolloin skriptin suoritus jatkuu seuraavalta loogiselta riviltä (while-lausekkeen jälkeiseltä riviltä).
<source lang="bash">
<source lang="bash">
while [ ehto ]
while [ ehto ]
do
do
  lauseita
    lauseita
done
done


Esimerkki:
Esimerkki:
while [ -f "testi" ]
while [ -f "testi" ]
do
do
  echo "Tiedosto on olemassa."
    echo "Tiedosto on olemassa."
  sleep 1
    sleep 1
done
done
</source>
</source>
Edellä oleva skripti tarkistaa, onko samassa hakemistossa oleva tiedosto <tt>testi</tt> olemassa. Tätä jatketaan niin kauan kunnes tiedostoa ei enää ole.
Edellä oleva skripti tarkistaa, onko samassa hakemistossa oleva tiedosto <tt>testi</tt> olemassa. Tätä jatketaan niin kauan kunnes tiedostoa ei enää ole.
Rivi 192: Rivi 192:
Until on while:n vastakohta. Until-lauseke jatkaa suoritusta niin kauan kunnes ehto on tosi.  
Until on while:n vastakohta. Until-lauseke jatkaa suoritusta niin kauan kunnes ehto on tosi.  
<source lang="bash">
<source lang="bash">
until [ ehto ]
until [ ehto ]
do
do
  lauseita
    lauseita
done
done
</source>
</source>


Rivi 263: Rivi 263:


<source lang="bash">
<source lang="bash">
#!/bin/bash
#!/bin/bash
for  i in `seq -f"%03g" 1 104`
for  i in `seq -f"%03g" 1 104`
do
do
     wget -c "http://koskisuomi.pp.fi/linucast/LinuCast$i.ogg"
     wget -c "http://koskisuomi.pp.fi/linucast/LinuCast$i.ogg"
done
done
</source>
</source>


Rekisteröitymätön käyttäjä

Navigointivalikko