Kirjoittaja Aihe: Ohjeita shell-skriptaukseen (bash)  (Luettu 374512 kertaa)

mikk0

  • Käyttäjä
  • Viestejä: 555
    • Profiili
Ohjeita shell-skriptaukseen (bash)
« : 12.09.05 - klo:21.49 »
Jos tahdot saada hyvää ohjeistusta komentotulkin (bash) skriptaukseen, niin Ubuntun Multiversestä löytyy abs-guide, eli The Advanced Bash-Scripting Guide.
Voin suositella lämpimästi, jos englanti ei tuota ongelmia.

Koodia: [Valitse]
sudo apt-get install abs-guide

Tämän jälkeen opus löytyy koneeltasi kun suuntaat vaikkapa Firefoxilla seuraavaan osoitteeseen file:///usr/share/doc/abs-guide/html/index.html

Mikko  ;D

Mikko Saarinen

Sapetsi

  • Käyttäjä
  • Viestejä: 45
    • Profiili
Re: Ohjeita shell-skriptaukseen (bash)
« Vastaus #1 : 13.09.05 - klo:10.38 »
Kiitoksia mikk0. Nappasin eilen tuon paketin ja vilkaisin hiukan, tehokas tietolähde vaikuttaa olevan :)
Ajattelin aloittaa jannen laittamasta "BASH Programming - Introduction HOW-TO: http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html" pätkästä (kiitokset myös jannelle!) ja jatkaa tähän abs guideen seuraavaksi.

Lukemista näissä riittää ja pään raapimista on todennäköisesti tiedossa mutta eiköhän tämä tästä pikkuhiljaa...  :D
New is now and will never be the same again...

peran

  • Vieras
Re: Ohjeita shell-skriptaukseen (bash)
« Vastaus #2 : 14.10.05 - klo:23.14 »
Vastaan tähän säikeeseen, koska en keksinyt parempaakaan paikkaa.

Olen tekemässä scriptiä, jolla Exif-datan mukaan määritellään pystykuva/vaakakuva.
Nyt puuttuu ohjelma, jolla pyöräytän kuvan pystykuvaksi.

Asiaan: Mikähän ohjelma pyöräyttää JPEG-kuvan 90 asteiden pykälissä muuttamatta EXIF-dataa paljoakaan (Orientation-tieto tietenkin saa muuttua).

Tietenkin olisi hyvä, jos kuva ei muuttuisi alkuperäisestä.
« Viimeksi muokattu: 14.10.05 - klo:23.15 kirjoittanut peran »

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Re: Ohjeita shell-skriptaukseen (bash)
« Vastaus #3 : 15.10.05 - klo:00.10 »
Asiaan: Mikähän ohjelma pyöräyttää JPEG-kuvan 90 asteiden pykälissä muuttamatta EXIF-dataa paljoakaan (Orientation-tieto tietenkin saa muuttua).

Tietenkin olisi hyvä, jos kuva ei muuttuisi alkuperäisestä.

jpegtran kääntää jpeg-kuvia häviöttömästi 90 asteen välein, tosin tuohon hommaan on myös ohjelma joka kääntää kuvan kuten jpegtran, mutta tekee sen EXIF-datan määräämällä tavalla. sen nimi on exiftran.
Janne

peran

  • Vieras
Re: Ohjeita shell-skriptaukseen (bash)
« Vastaus #4 : 15.10.05 - klo:00.47 »
Asiaan: Mikähän ohjelma pyöräyttää JPEG-kuvan 90 asteiden pykälissä muuttamatta EXIF-dataa paljoakaan (Orientation-tieto tietenkin saa muuttua).

Tietenkin olisi hyvä, jos kuva ei muuttuisi alkuperäisestä.

jpegtran kääntää jpeg-kuvia häviöttömästi 90 asteen välein, tosin tuohon hommaan on myös ohjelma joka kääntää kuvan kuten jpegtran, mutta tekee sen EXIF-datan määräämällä tavalla. sen nimi on exiftran.
Öh mitenkäs sources.list pitäis olla, kun nykyisessäni en pysty löytämää kumpaakaan en pysty löytämään.
elikkäs tässä on nykyiseni. (En löytänyt synaptecin pakettien hallinnalla).
Valitan en löytänyt kooditageja:
Koodia: [Valitse]
deb cdrom:[Ubuntu 5.04 _Hoary Hedgehog_ - Release i386 (20050407)]/ hoary main restricted


deb http://fi.archive.ubuntu.com/ubuntu hoary main restricted
deb-src http://fi.archive.ubuntu.com/ubuntu hoary main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://fi.archive.ubuntu.com/ubuntu hoary-updates main restricted
deb-src http://fi.archive.ubuntu.com/ubuntu hoary-updates main restricted

## Uncomment the following two lines to add software from the 'universe'
## repository.
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## universe WILL NOT receive any review or updates from the Ubuntu security
## team.
# deb http://fi.archive.ubuntu.com/ubuntu hoary universe
# deb-src http://fi.archive.ubuntu.com/ubuntu hoary universe

deb http://security.ubuntu.com/ubuntu hoary-security main restricted
deb-src http://security.ubuntu.com/ubuntu hoary-security main restricted

# deb http://security.ubuntu.com/ubuntu hoary-security universe
# deb-src http://security.ubuntu.com/ubuntu hoary-security universe
#deb http://download.skype.com/linux/repos/debian/ stable non-free
deb http://archive.ubuntu.com/ubuntu warty main restricted universe
deb-src ftp://archive.ubuntu.com/ubuntu warty main restricted universe
#deb http://backports.ubuntuforums.org/backports/dists/warty-backports/universe/binary-i386/ ./
#deb http://debian.meebey.net/ ./

## Elosen sivuilta voi päivittää soikon oppenoffiseen, muuten riskaa peliä
#deb http://elonen.iki.fi/code/unofficial-debs/ ./

deb http://archive.ubuntu.com/ubuntu hoary-backports main restricted universe multiverse

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Re: Ohjeita shell-skriptaukseen (bash)
« Vastaus #5 : 15.10.05 - klo:10.24 »
Öh mitenkäs sources.list pitäis olla, kun nykyisessäni en pysty löytämää kumpaakaan en pysty löytämään.
elikkäs tässä on nykyiseni. (En löytänyt synaptecin pakettien hallinnalla).

mik0n suomentamassa ubuntuguidessa on ihan hyvä setti:
http://koti.mbnet.fi/mikko75/ohjeet/ubuntuguide/index.html#extrarepositories

exiftran näkyy olevan ihan omassa paketissaan ja jpegtran on paketissa libjpeg-progs (vaikka tietysti kirjastona tulee muidenkin softien mukana).
Janne

E.K.Virtanen

  • Käyttäjä
  • Viestejä: 736
    • Profiili
    • Sähköaivoilua
Re: Ohjeita shell-skriptaukseen (bash)
« Vastaus #6 : 13.11.05 - klo:18.02 »
Jos tahdot saada hyvää ohjeistusta komentotulkin (bash) skriptaukseen, niin Ubuntun Multiversestä löytyy abs-guide, eli The Advanced Bash-Scripting Guide.
Voin suositella lämpimästi, jos englanti ei tuota ongelmia.

Koodia: [Valitse]
sudo apt-get install abs-guide

Tämän jälkeen opus löytyy koneeltasi kun suuntaat vaikkapa Firefoxilla seuraavaan osoitteeseen file:///usr/share/doc/abs-guide/html/index.html

Mikko  ;D

Kiitoksia, tuo tuli hyvään tarpeeseen ainakin meikäläiselle.  ;)

munakuutio-

  • Käyttäjä
  • Viestejä: 115
    • Profiili
Re: Ohjeita shell-skriptaukseen (bash)
« Vastaus #7 : 19.03.06 - klo:16.49 »
No nyt kävi luonnollinen reaktio eli alkoi tuo srkiptaaminen kiinostamaan. Olisko jossian olemassa jotain melko simppeliä howto/faq juttua koskien skriptaamista. Ei välttämättä mitään ohjeita vaan pelkästään että mitä se on, mihin sitä käytetään.

Ja jos kielenä olisi vielä suomi tai englanti niin sen paremi.

munakuutio-

mikk0

  • Käyttäjä
  • Viestejä: 555
    • Profiili
Skriptaus - mitä se on
« Vastaus #8 : 22.03.06 - klo:13.46 »
Voin antaa hyvin yksinkertaistetun vastauksen siitä, mitä ovat shell-skriptit.

Käytännössä ne ovat vain peräkkäin laitettuja komentoja, joiden tarkoituksena on saada jokin asia tapahtumaan haluamallasi tavalla.

Unixin (ja Linuxin) filosofia on siinä, että muutaman ison ja yleiskäyttöisen ohjelman sijasta on olemassa miljuuna pientä ohjelmaa, jotka tekevät jonkin yksinkertaisen asian, mutta tekevät sen hyvin. Tästä syystä pitää monesti käyttää useampaa kuin yhtä ohjelmaa jotta päästään olemassa olevasta alkutilanteesta haluttuun lopputulokseen.

Tällaisen komentojen ketjutuksen voi kirjoittaa tiedostoksi ja näin ollen ei tarvitse joka kerta kirjoitella hirveää määrää komentoja jos sama tilanne toistuu.

Kun soppaan lisätään vielä muuttujat ja mahdollisuus muuttaa komentojen suoritusjärjestystä / suoritettavia komentoja erilaisten ehtolausekkeiden avulla, niin voidaan luoda hyvinkin monipuolisia skriptejä, jotka käyttäytyvät eri tavoin eri tilanteissa.

Esimerkkinä voisi olla vaikkapa skripti joka hakee tietyn tiedoston nettipalvelimelta wget-käskyllä ja tuon tiedoston sisällön perusteella lisää vaikkapa jonkin rivin suources.list-tiedostoon ja asentaa ohjelman tuosta juuri lisätystä lähteestä.

Toinen voisi olla kuvien lataaminen kamerasta ja niiden koon muokkaaminen automaattisesti nettijulkaisuun sopivaksi. Tämän jälkeen ne sujahtaisivat automaattisesti ftp-palvelimelle ja niille lisättäisiin linkki sinun nettisivuiltasi. (Tämä idea varastettu osin MikroBitistä  ::))

Periaate siis on, että jos voit tehdä jotain komentoriviltä, niin voit tehdä sen myös skriptin avulla.
Tuo yllä mainittu abs-guide on erinomainen lähdeteos, johon kannattaa tutustua.

Mikko

Lisäys:

Nyt kun alkuun päästiin, niin voisiko joku selventää eroa skriptin ja shell function välillä.
« Viimeksi muokattu: 23.03.06 - klo:10.13 kirjoittanut mikk0 »

Mikko Saarinen

ajv

  • Käyttäjä
  • Viestejä: 3
    • Profiili
Re: Skriptaus - mitä se on
« Vastaus #9 : 27.04.06 - klo:09.51 »
Nyt kun alkuun päästiin, niin voisiko joku selventää eroa skriptin ja shell function välillä.

Funktiot suoritetaan saman shellin kontekstissa, kun skriptiä varten luodaan uusi prosessi. Elikkä kutsuttavaan funktioon näkyvät samat muuttujat, ja funktiossa määritettävät muuttujat näkyvät ulkopuolelle, ellei niitä eksplisiittisesti määritellä paikallisiksi local sanalla.

Koodia: [Valitse]
#!/bin/sh

function funkkari {
        echo $a
        b="bee"
}

a="aaa"
funkkari
echo $b

pjotr

  • Käyttäjä
  • Viestejä: 625
    • Profiili
Re: Ohjeita shell-skriptaukseen (bash)
« Vastaus #10 : 30.04.06 - klo:20.33 »
Lainaus
abs-guide, eli The Advanced Bash-Scripting Guide.

Koodia: [Valitse]
sudo apt-get install abs-guide

Onkohan sama kuin tämä:

www.tldp.org/LDP/abs/abs-guide.pdf

Itse ainakin mieluummin tuhlaan paperia ja tulostan kuin tuijotan kuvaruutua.

pjotr

EDIT: No okei, jos ei pysty duunissa ilmaiseksi tulostamaan niin tuossa on 652 sivua...
« Viimeksi muokattu: 30.04.06 - klo:23.41 kirjoittanut pjotr »
www.tehotuotanto.net

The surest sign that intelligent life exists elsewhere in the Universe is that none of it has tried to contact us.

DtW

  • Vieras
Vs: Re: Skriptaus - mitä se on
« Vastaus #11 : 19.01.07 - klo:01.40 »
Koodia: [Valitse]
#!/bin/sh

function funkkari {

Kun skripti ajetaan /bin/sh:lla, täytyy käyttää POSIX-sh-yhteensopivaa syntaksia. Yllä on käytetty bashin funktioiden syntaksia, joten skripti ei toimi järjestelmissä, joissa /bin/sh on linkattu johonkin muuhun kuin /bin/bash-tulkkiin. Esimerkiksi Edgyssä se ei toimi. Jos ei itse ole sh:n syntaksista varma ja käyttää bashin ohjekirjoja ohjelmoinnin apuna, kannattaa skriptin alkuun kirjoittaa aina #!/bin/bash . sh-yhteensopiva syntaksi olisi seuraava (toimii toki myös bashilla):

Koodia: [Valitse]
#!/bin/sh

funkkari() { ... }

nailor

  • Käyttäjä
  • Viestejä: 19
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #12 : 27.07.07 - klo:11.02 »
Mikään ei myöskään sido shell-skriptausta bashin käyttöön. Teoriassa tuossa voi käyttää "mitä tahansa", eli esim. python ja php toimivat myös. Itse preferoin pythonia, sen kirjoittaminen on vain niin pirusti helpompaa kuin jonkun POSIX-yhteensopivan sylkeminen :)

E.K.Virtanen

  • Käyttäjä
  • Viestejä: 736
    • Profiili
    • Sähköaivoilua
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #13 : 13.08.07 - klo:20.54 »
Onkohan kotimaisella tehtyä bash-script opasta missään? Hieman kattavampaa tosin kuin tämä; http://linux.fi/index.php/Bash-skriptaus
Uskoisin mokomalla olevan hyvinkin kysyntää kun tuo minun "arvaa numero väliltä 1 - 100" ohjelmani ei tunnu etenevän kun koko ajan jotain käsittämätöntä probleemaa (:

MikkoJP

  • Käyttäjä
  • Viestejä: 1148
  • iBook 600 MHz + Debian 4.0
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #14 : 15.08.07 - klo:17.30 »
Onkohan kotimaisella tehtyä bash-script opasta missään? Hieman kattavampaa tosin kuin tämä; http://linux.fi/index.php/Bash-skriptaus
Uskoisin mokomalla olevan hyvinkin kysyntää kun tuo minun "arvaa numero väliltä 1 - 100" ohjelmani ei tunnu etenevän kun koko ajan jotain käsittämätöntä probleemaa (:

En tiedä onko kattavampi vai ei:

* Mika Kousa, Komentotulkkiohjelmointi bash-shellille ( http://users.tkk.fi/~mkousa/shell-doc/shell-doc.html)


E.K.Virtanen

  • Käyttäjä
  • Viestejä: 736
    • Profiili
    • Sähköaivoilua
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #15 : 20.08.07 - klo:20.46 »
Kiitoksia MikkoJP. Näitä bash yms. linkkejä voisi melkein kerätä jonnekin hieman jotta olisi helpottava kokoelma tarjolla.

ubuntus

  • Käyttäjä
  • Viestejä: 15
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #16 : 06.11.07 - klo:21.06 »
Kiitos mielenkiintoisesta oppaasta, lueskelin tuossa erästä toista mutta täytyy katsella tämäkin läpi. Tänään sain yhtäkkiä päähäni opetella tekemään skriptejä, mutta sitten tuli ongelma eteen. Miten ihmeessä voin ajaa skriptin testi.sh joka sijaitsee /home/mina/skripti kansiossa kun itse olen kotihakemiston juuressa /home/mina. Yhden ohjeen luin, missä käskettiin luoda bin kansio tuonne kotihakemiston juureen ja kopioida skriptit sinne eli siis,

pwd: /home/mina
mkdir bin
cp testi.sh ~/bin

En kuitenkaan saa ajettua skriptiä juuresta, mitäs tässä ei nyt ymmärrä.

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #17 : 06.11.07 - klo:21.30 »
Miten ihmeessä voin ajaa skriptin testi.sh joka sijaitsee /home/mina/skripti kansiossa kun itse olen kotihakemiston juuressa /home/mina.

scriptillä pitää olla suoritusoikeudet ja sen pitää joko sijaita hakupolun varrella tai siihen pitää osoittaa joko absoluuttista tai suhteellista polkua käyttäen.

absoluuttinen polku:
Koodia: [Valitse]
$ /home/mina/skripti
suhteellinen polku mistä tahansa (~ osoittaa käyttäjän omaan kotihakemistoon):
Koodia: [Valitse]
$ ~/skripti
suhteellinen polku kotihakemistosta (. osoittaa nykyiseen hakemistoon):
Koodia: [Valitse]
$ ./skripti
suhteellinen polku hakemistosta /home/minä/Desktop (.. osoittaa yhtä pykälää lähempä juurta olevaan hakemistoon):
Koodia: [Valitse]
$ ../skripti
jne.

Yhden ohjeen luin, missä käskettiin luoda bin kansio tuonne kotihakemiston juureen ja kopioida skriptit sinne eli siis,

pwd: /home/mina
mkdir bin
cp testi.sh ~/bin

En kuitenkaan saa ajettua skriptiä juuresta, mitäs tässä ei nyt ymmärrä.

tuo ~/bin on kätevä tapa keskittää scriptit yhteen hakemistoon, mutta sitä käytettäessä pitää tietty varmistaa, että hakemisto on hakupolun varrella. sitä varten tiedostossa ~/.bash_profile on kohta:
Koodia: [Valitse]
# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
    PATH=~/bin:"${PATH}"
fi

mutta ko. scriptiä ei lueta kuin sisään kirjautuessa, ellei niin käsketä erikseen tekemään, joten sessio jossa luot hakemiston ~/bin ei sitä vielä automaattisesti tunnista.

voit tarkistaa mitä hakemistoja polussasi on, komennolla:
Koodia: [Valitse]
$ echo $PATH
ja voit lukea .bash_profilen kyseiseen terminaali-istuntoosi komennolla:
Koodia: [Valitse]
$ source ~/.bash_profile
ja muista tosiaan ne suoritusoikeudet ;)
Janne

raimo

  • Käyttäjä
  • Viestejä: 4265
  • openSUSE Tumbleweed
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #18 : 06.11.07 - klo:21.44 »
ja muista tosiaan ne suoritusoikeudet ;)

Selvennän hiukan lisää, kun kerta kirjoitin jo pitkät pätkät, mutta jannella on edelleen nopeammat sormet!!  :D

Suoritusoikeudet saa vaikkapa näin:
Koodia: [Valitse]
chmod 755 ~/bin/skripti
ja yllättäen skriptin voi ajaa vaikka sillä ei olisikaan suoritusoikeuksia:
Koodia: [Valitse]
sh ~/bin/skripti
mutta tuossa ei sinänsä ole järkeä, eli aseta vaan ne suoritusoikeudet. ;)
Tietä käyden tien on vanki. Vapaa on vain umpihanki.
Aaro Hellaakoski

ubuntus

  • Käyttäjä
  • Viestejä: 15
    • Profiili
Vs: Ohjeita shell-skriptaukseen (bash)
« Vastaus #19 : 07.11.07 - klo:08.01 »
Kiitokset Jannelle ja raimolle. Miten sitä ei eilen tajunnut että kone täytyy käynnistää uudelleen niin että tuo kotihakemiston /bin löytyy  ;D.  Kummallekkin hatunnosto ja syvä kumarrus, pääsee taas hieman eteenpäin tässä harjoittelussa.