Rekisteröitymätön käyttäjä
Ero sivun ”Bash-skriptaus” versioiden välillä
Siirry navigaatioon
Siirry hakuun
ei muokkausyhteenvetoa
Ei muokkausyhteenvetoa |
|||
(7 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 $ | echo "Olet hakemistossa $(pwd), tiedostolistaus:" | ||
ls | ls | ||
</source> | </source> | ||
Rivi 43: | Rivi 43: | ||
Muuttujat määritellään syntaksilla | Muuttujat määritellään syntaksilla | ||
<source lang="bash"> | <source lang="bash"> | ||
nimi=arvo | |||
</source> | </source> | ||
ja niihin viitataan laittamalla muuttujan eteen $ | ja niihin viitataan laittamalla muuttujan eteen $ | ||
<source lang="bash"> | <source lang="bash"> | ||
$nimi | |||
</source> | </source> | ||
Siinä tapauksessa mikäli halutaan, että komennon tulos on muuttuja asetetaan muuttuja tyyliin: | Siinä tapauksessa mikäli halutaan, että komennon tulos on muuttuja asetetaan muuttuja tyyliin: | ||
Rivi 55: | Rivi 55: | ||
Tapauksia, joissa käyttäjän tarkoittama muuttuja on epäselvä, tulee käyttää aaltosulkuja muuttujan ympärillä | Tapauksia, joissa käyttäjän tarkoittama muuttuja on epäselvä, tulee käyttää aaltosulkuja muuttujan ympärillä | ||
<source lang="bash"> | <source lang="bash"> | ||
${foo}bar | |||
</source> | </source> | ||
kun halutaan tulostaa teksti <tt>bar</tt> muuttujan <tt>foo</tt> jälkeen. | kun halutaan tulostaa teksti <tt>bar</tt> muuttujan <tt>foo</tt> jälkeen. | ||
Rivi 61: | Rivi 61: | ||
Ensimmäisen skriptimme tapauksessa käytimme jo ympäristömuuttujaa $PWD echo:n kanssa. Tehdäänpä samantyyppinen skripti nyt käyttäen itse määrittelemäämme muuttujaa: | Ensimmäisen skriptimme tapauksessa käytimme jo ympäristömuuttujaa $PWD echo:n kanssa. Tehdäänpä samantyyppinen skripti nyt käyttäen itse määrittelemäämme muuttujaa: | ||
<source lang="bash"> | <source lang="bash"> | ||
#!/bin/bash | |||
HEI="Hei, `whoami`, mitä kuuluu?" | |||
echo $HEI | |||
</source> | </source> | ||
Kuten huomaat, kun muuttujaan sijoitetaan arvo, voidaan käyttää samoja "kikkoja" kuin muuallakin skriptissä, esimerkiksi tässä tapauksessa sijoitamme muuttujaan merkkijonon jonka sisällä on ohjelman <tt>whoami</tt> tuloste. | Kuten huomaat, kun muuttujaan sijoitetaan arvo, voidaan käyttää samoja "kikkoja" kuin muuallakin skriptissä, esimerkiksi tässä tapauksessa sijoitamme muuttujaan merkkijonon jonka sisällä on ohjelman <tt>whoami</tt> tuloste. | ||
Rivi 74: | Rivi 74: | ||
Lisäksi muuttujaan sijoitettavan arvon on oltava lainausmerkkien sisällä, jos siihen kuuluu välilyönti. Yksittäisen sanan tai numeron voi sijoittaa ilman lainausmerkkejä: | Lisäksi muuttujaan sijoitettavan arvon on oltava lainausmerkkien sisällä, jos siihen kuuluu välilyönti. Yksittäisen sanan tai numeron voi sijoittaa ilman lainausmerkkejä: | ||
<source lang="bash"> | <source lang="bash"> | ||
numero=43 | |||
</source> | </source> | ||
Rivi 80: | Rivi 80: | ||
Ehdollisia rakenteita luodaan bashille if, then, else ja fi -avainsanoilla. Rakenteen syntaksi on seuraava: | Ehdollisia rakenteita luodaan bashille if, then, else ja fi -avainsanoilla. Rakenteen syntaksi on seuraava: | ||
<source lang="bash"> | <source lang="bash"> | ||
if [ ehto ] | |||
then | |||
lauseita | lauseita | ||
elif [ toinen ehto ] | |||
then | |||
lauseita | lauseita | ||
else | |||
muita lauseita | muita lauseita | ||
fi | |||
</source> | </source> | ||
Ehdot merkitään hakasulkeiden sisään esimerkiksi seuraavalla tavalla | Ehdot merkitään hakasulkeiden sisään esimerkiksi seuraavalla tavalla | ||
<source lang="bash"> | <source lang="bash"> | ||
#!/bin/bash | |||
if [ $PWD = "/" ] | |||
then | |||
echo "Tämä skripti suoritetaan juurihakemistossa"; | |||
else | |||
echo "Skripti suoritetaan hakemistossa $PWD"; | |||
fi | |||
</source> | </source> | ||
Rivi 144: | Rivi 144: | ||
Esimerkiksi seuraavat ehdot ovat tosia | Esimerkiksi seuraavat ehdot ovat tosia | ||
<source lang="bash"> | <source lang="bash"> | ||
[ 2 -lt 5 ] | |||
[ "moi" != "linux" ] | |||
[ 54 -ge 53 ] | |||
[ -f "/etc/fstab" ] | |||
</source> | </source> | ||
Rivi 155: | Rivi 155: | ||
<source lang="bash"> | <source lang="bash"> | ||
for muuttuja in `ls` | |||
do | |||
echo $muuttuja | |||
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:" | |||
for luku in $(seq 10) | |||
do | |||
echo $luku | |||
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 | ||
<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 ] | |||
do | |||
lauseita | |||
done | |||
Esimerkki: | Esimerkki: | ||
while [ -f "testi" ] | |||
do | |||
echo "Tiedosto on olemassa." | |||
sleep 1 | |||
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 ] | |||
do | |||
lauseita | |||
done | |||
</source> | </source> | ||
Rivi 263: | Rivi 263: | ||
<source lang="bash"> | <source lang="bash"> | ||
#!/bin/bash | |||
for i in `seq -f"%03g" 1 104` | |||
do | |||
wget -c "http://koskisuomi.pp.fi/linucast/LinuCast$i.ogg" | wget -c "http://koskisuomi.pp.fi/linucast/LinuCast$i.ogg" | ||
done | |||
</source> | </source> | ||