Shell script

Miten tehdä shell scripti joka saa parametreina 2 parametria ja käynnistää niillä Java ohjelman?

#
#
java Oma $1 $2

Jotenkin näin vai???
16587
Äänestä

Muut lukivat myös

Vastaukset 16

Vanhimmat

kato vielä jostain tutorialista, että ne parametrit tosiaan välittyy noilla $1 merkeillä.

Tuon javan eteen laita koko polku, missä java sijaitsee. Tuo saattaa toimia, kun itse käynnistät shelistä, mutta jos haluatkin ajaa tuota jonkun toisen scriptin sisältä koneen bootatessa, niin silloin tarttee koko polun tuohon eteen.

/usr/sbin/java blaablaa tms. ja perään vielä &, niin se ajaa sitä taustaprosessina

sitten chmod tiedostolle, että sitä voi ajaa. Suoritusoikeus täytyy ainakin olla.

chmod 777 munscript (777 antaa kaikki oikeudet kaikille HUOM HUOM)

ja sitten.

./munscript

Jos haluat sitten tuon käynnistyvän jokaisen bootin päätteeksi, niin laita sen käynnistys vaikka /etc/rc.d/rc.local tiedostoon vaikka näin.

echo '/oikee/polku/tahan/munscript' >> /etc/rc.d/rc.local

Äänestä
  • miten siirrän folderin toisen folderin sisälle?
    mv eka toka
    tuo eka sisältää useita tiedostoja. Toimii kyllä komentoriviltä mutta shell scriptissä valittaa jotain ...last argument must be directory... vaikka siis tuo toka onkin jo olemassa oleva dir. Mikä tässä mättää?

    Äänestä

  • chmodille 777 on ok, jos haluaa antaa kaikille mahdollisuuden tehdä jäynää muille. 755 (eli rwxr-xr-x) on huomattavasti turvallisempi.

    Äänestä

  • LuniX kirjoitti:

    miten siirrän folderin toisen folderin sisälle?
    mv eka toka
    tuo eka sisältää useita tiedostoja. Toimii kyllä komentoriviltä mutta shell scriptissä valittaa jotain ...last argument must be directory... vaikka siis tuo toka onkin jo olemassa oleva dir. Mikä tässä mättää?

    mv jokuhakemisto jokutoinenhakemisto

    Tuo toimii kyllä shelliskripissäkin, joten skriptissäsi on joku bugi. "last argument must be directory" viittaa siihen, että annat mv:lle monta siirrettävää tiedostoa mutta viimeinen argumentti ei ole hakemisto (oletan tuon virheen olevan kokonaisuudessaan "when moving multiple files, last argument must be a directory").

    Yksi mahdollisuus tähän bugiin on se, että annat skriptille tiedostonnimiä, joissa on välilyöntejä, ja teet siirron skriptissä mv:llä suoraan näin: mv $1 $2 tjsp. Jotta myös välilyöntejä sisältävät muuttujat tulkittaisiin oikein, niin muuttujat pitää laittaa lainausmerkkien ympärille, jotta myös mv näkee vain kaksi argumenttia. Lisäksi alkuperäisellekin skriptille pitää antaa ne tiedostonnimet lainausmerkkien sisällä, jos ne sisältävät tyhjää, esim. jokuskripti "väli lyönti" "joku toinen".

    Jos ongelma ei ole tuossa, niin olisi helpointa, jos kopioit sen oman skriptin tähän sekä annat esimerkkiajon toimimattomasta tilanteesta (copypastet molemmista sellaisenaan, ei ulkomuistista).

    Äänestä

  • Mik kirjoitti:

    mv jokuhakemisto jokutoinenhakemisto

    Tuo toimii kyllä shelliskripissäkin, joten skriptissäsi on joku bugi. "last argument must be directory" viittaa siihen, että annat mv:lle monta siirrettävää tiedostoa mutta viimeinen argumentti ei ole hakemisto (oletan tuon virheen olevan kokonaisuudessaan "when moving multiple files, last argument must be a directory").

    Yksi mahdollisuus tähän bugiin on se, että annat skriptille tiedostonnimiä, joissa on välilyöntejä, ja teet siirron skriptissä mv:llä suoraan näin: mv $1 $2 tjsp. Jotta myös välilyöntejä sisältävät muuttujat tulkittaisiin oikein, niin muuttujat pitää laittaa lainausmerkkien ympärille, jotta myös mv näkee vain kaksi argumenttia. Lisäksi alkuperäisellekin skriptille pitää antaa ne tiedostonnimet lainausmerkkien sisällä, jos ne sisältävät tyhjää, esim. jokuskripti "väli lyönti" "joku toinen".

    Jos ongelma ei ole tuossa, niin olisi helpointa, jos kopioit sen oman skriptin tähän sekä annat esimerkkiajon toimimattomasta tilanteesta (copypastet molemmista sellaisenaan, ei ulkomuistista).

    Miten tuo siirto pitäisi oikeasti shell scriptiin koodata? Eli jos haluan siirtää useita pdf-dokumenttejä sisältävän kansion toisen kansion sisälle?
    Tuleeko scriptiin vain:
    mv PDF newFolder

    Siirtääkö tuo käsky tuon PDF kansion ja koko sisällön tuohon newFolder-kansioon. Minulla kun tuo ei toimi...damn

    Äänestä

  • LuniX kirjoitti:

    Miten tuo siirto pitäisi oikeasti shell scriptiin koodata? Eli jos haluan siirtää useita pdf-dokumenttejä sisältävän kansion toisen kansion sisälle?
    Tuleeko scriptiin vain:
    mv PDF newFolder

    Siirtääkö tuo käsky tuon PDF kansion ja koko sisällön tuohon newFolder-kansioon. Minulla kun tuo ei toimi...damn

    ajan ensin sillä shell scriptillä java ohjelman joka luo ton PDF kansion ja siihen sisällön. hHeti perää haluaisin siirtää tuon luodun kansion sisältöineen toiseen (TPDF) kansioo:

    echo "Eka shell script(test)"
    java -cp Eka
    mv PDF TPDF
    exit 0

    nyt siis sain siirrettyä, mutta nuo *.pdf tiedostot menivät tuon TPDF kansion alle, eikä siis tullut haluamaani rakennetta TPDF/PDF/*.pdf
    Ja lisäksi tuon TPDF kansion nimeksi tuli TPDF? Mikä on vialla?

    Äänestä

  • LuniX kirjoitti:

    Miten tuo siirto pitäisi oikeasti shell scriptiin koodata? Eli jos haluan siirtää useita pdf-dokumenttejä sisältävän kansion toisen kansion sisälle?
    Tuleeko scriptiin vain:
    mv PDF newFolder

    Siirtääkö tuo käsky tuon PDF kansion ja koko sisällön tuohon newFolder-kansioon. Minulla kun tuo ei toimi...damn

    No ihan varmasti pitäisi toimia juuri noin. Kokeile vaikka huviksesi ensin käsin:

    luot hakemiston (kansio kun on joku Windows-termi..) PDF (mkdir PDF)
    luot hakemiston newFolder (mkdir newFolder)
    kopioit hakemistoon PDF jotain testitiedostoja (cp a.pdf b.pdf c.pdf PDF)

    Nyt komento "mv PDF newFolder" siirtää hakemiston PDF hakemiston newFolderin alle sisältöineen.

    Millä tavalla tuo ei muka toimi ? Virheilmoitus ?

    Äänestä

  • Mik kirjoitti:

    No ihan varmasti pitäisi toimia juuri noin. Kokeile vaikka huviksesi ensin käsin:

    luot hakemiston (kansio kun on joku Windows-termi..) PDF (mkdir PDF)
    luot hakemiston newFolder (mkdir newFolder)
    kopioit hakemistoon PDF jotain testitiedostoja (cp a.pdf b.pdf c.pdf PDF)

    Nyt komento "mv PDF newFolder" siirtää hakemiston PDF hakemiston newFolderin alle sisältöineen.

    Millä tavalla tuo ei muka toimi ? Virheilmoitus ?

    En tosiaan osaa sanoa miksi ei toimi. Esim jos on valmis hakemisto newFolder ja teen shell scriptiin komennon:

    mv PDF newFolder

    niin tuloksena on tyhjä TPDF hakemisto ja TPDF? hakemisto, jossa *.pdf tiedostot ovat ilman PDF-kansiota. Toimii kyllä ok komentoriviltä

    Äänestä

  • LuniX kirjoitti:

    ajan ensin sillä shell scriptillä java ohjelman joka luo ton PDF kansion ja siihen sisällön. hHeti perää haluaisin siirtää tuon luodun kansion sisältöineen toiseen (TPDF) kansioo:

    echo "Eka shell script(test)"
    java -cp Eka
    mv PDF TPDF
    exit 0

    nyt siis sain siirrettyä, mutta nuo *.pdf tiedostot menivät tuon TPDF kansion alle, eikä siis tullut haluamaani rakennetta TPDF/PDF/*.pdf
    Ja lisäksi tuon TPDF kansion nimeksi tuli TPDF? Mikä on vialla?

    exit 0 on tarpeeton skriptin lopussa, 0 palautetaan muutenkin, jos kaikki meni ok.

    Rivi "java -cp Eka" vaikuttaa epäilyttävältä, sillä javan optio -cp ottaa argumentikseen tuon parametrin Eka, muttet anna enää sitä ajettavaa ohjelmaa. Typo ?

    Tarkistapa nyt alkajaisiksi, että hakemistot PDF ja TPDF ovat todella olemassa java-ohjelman käynnistymisen jälkeen. Laita vaikka "ls -l" rivien java.. ja mv.. väliin. Mikäli PDF ja TPDF ovat hakemistoja, niin mv PDF TPDF pitäisi luoda hakemistorakenteen TPDF/PDF.

    "Ja lisäksi tuon TPDF kansion nimeksi tuli TPDF?", ööh...vai tarkoitatko tuossa oikeasti, että PDF:n nimeksi tuli TPDF? Siinä tapauksessa hakemistoa TPDF ei ole olemassakaan, joten mv vain vaihtaa hakemiston nimen toiseksi. Testaa myös, luoko se java-ohjelma varmasti oikeasti sen hakemiston, jos sitä ei ole ennestään olemassa.

    Lopuksi vielä esimerkkipätkä, että se mv toimii kuten pitääkin:

    /tmp>mkdir PDF TPDF
    /tmp>cd PDF
    /tmp/PDF>touch a.pdf b.pdf
    /tmp/PDF>cd ..
    /tmp>ls PDF TPDF
    PDF:
    a.pdf b.pdf

    TPDF:
    /tmp>mv PDF TPDF
    /tmp>ls PDF TPDF
    ls: PDF: No such file or directory
    TPDF:
    PDF
    /tmp>ls TPDF/PDF/
    a.pdf b.pdf

    Äänestä

  • LuniX kirjoitti:

    En tosiaan osaa sanoa miksi ei toimi. Esim jos on valmis hakemisto newFolder ja teen shell scriptiin komennon:

    mv PDF newFolder

    niin tuloksena on tyhjä TPDF hakemisto ja TPDF? hakemisto, jossa *.pdf tiedostot ovat ilman PDF-kansiota. Toimii kyllä ok komentoriviltä

    Onpas nyt jo sekavaa. Mikä on tuo hakemisto TPDF?, eli onko siinä joku kysymysmerkkikin ? Mistäs se ilmestyi tähän väliin ? Vaikuttaa vähän siltä, että se skriptisi on joko hämärän buginen (ehket kopoioinut sitä tähän sellaisenaan) tai sitten se java-ohjelma bugaa. Parempien ideoiden puutteessa kokeile vielä vaikka ajaa sitä shellin optioilla -x tai -v tai molemmat yhtä aikaa, esim. sh -xv ./omaskripti, niin näet mitä komentoja ajetaan ja millä arvoilla niitä ajetaan.

    Äänestä

  • Mik kirjoitti:

    exit 0 on tarpeeton skriptin lopussa, 0 palautetaan muutenkin, jos kaikki meni ok.

    Rivi "java -cp Eka" vaikuttaa epäilyttävältä, sillä javan optio -cp ottaa argumentikseen tuon parametrin Eka, muttet anna enää sitä ajettavaa ohjelmaa. Typo ?

    Tarkistapa nyt alkajaisiksi, että hakemistot PDF ja TPDF ovat todella olemassa java-ohjelman käynnistymisen jälkeen. Laita vaikka "ls -l" rivien java.. ja mv.. väliin. Mikäli PDF ja TPDF ovat hakemistoja, niin mv PDF TPDF pitäisi luoda hakemistorakenteen TPDF/PDF.

    "Ja lisäksi tuon TPDF kansion nimeksi tuli TPDF?", ööh...vai tarkoitatko tuossa oikeasti, että PDF:n nimeksi tuli TPDF? Siinä tapauksessa hakemistoa TPDF ei ole olemassakaan, joten mv vain vaihtaa hakemiston nimen toiseksi. Testaa myös, luoko se java-ohjelma varmasti oikeasti sen hakemiston, jos sitä ei ole ennestään olemassa.

    Lopuksi vielä esimerkkipätkä, että se mv toimii kuten pitääkin:

    /tmp>mkdir PDF TPDF
    /tmp>cd PDF
    /tmp/PDF>touch a.pdf b.pdf
    /tmp/PDF>cd ..
    /tmp>ls PDF TPDF
    PDF:
    a.pdf b.pdf

    TPDF:
    /tmp>mv PDF TPDF
    /tmp>ls PDF TPDF
    ls: PDF: No such file or directory
    TPDF:
    PDF
    /tmp>ls TPDF/PDF/
    a.pdf b.pdf

    Se java juttu toimii ihan ok. Voitko pistää tähän yksinkertaisen scriptin joka siis luo kansion ja siirtää toisen kansion sisältöineen sen sisälle?

    Äänestä

  • LuniX kirjoitti:

    Se java juttu toimii ihan ok. Voitko pistää tähän yksinkertaisen scriptin joka siis luo kansion ja siirtää toisen kansion sisältöineen sen sisälle?

    Esimerkkipätkät löytyvätkin jo paristakin aiemmasta viestistäni, ota niistä mallia.

    Lyhyesti siis:
    1. mkdir jokuhakemisto
    2. mv jokutoinenhakemisto jokuhakemisto

    Äänestä

  • Mik kirjoitti:

    Onpas nyt jo sekavaa. Mikä on tuo hakemisto TPDF?, eli onko siinä joku kysymysmerkkikin ? Mistäs se ilmestyi tähän väliin ? Vaikuttaa vähän siltä, että se skriptisi on joko hämärän buginen (ehket kopoioinut sitä tähän sellaisenaan) tai sitten se java-ohjelma bugaa. Parempien ideoiden puutteessa kokeile vielä vaikka ajaa sitä shellin optioilla -x tai -v tai molemmat yhtä aikaa, esim. sh -xv ./omaskripti, niin näet mitä komentoja ajetaan ja millä arvoilla niitä ajetaan.

    #!/bin/bash
    #
    echo "script(test2)"
    mkdir Test
    mkdir PDF
    mv PDF Test

    tulee virheilmo:

    mv: cannot stat `PDF': No such file or directory
    : command not found
    : command not found

    Kansiot se kyllä luo mutta kummastakin kansiosta tulee ? loppuinen eli PDF? ja Test?. Mikä tässä voi olla?

    Äänestä

  • LuniX kirjoitti:

    #!/bin/bash
    #
    echo "script(test2)"
    mkdir Test
    mkdir PDF
    mv PDF Test

    tulee virheilmo:

    mv: cannot stat `PDF': No such file or directory
    : command not found
    : command not found

    Kansiot se kyllä luo mutta kummastakin kansiosta tulee ? loppuinen eli PDF? ja Test?. Mikä tässä voi olla?

    Minulla tuo toimi täysin oikein niin kuin oletinkin sen toimivan. Ulkoisestikaan tuossa skriptissä ei ole mitään vikaa. Mitä jos kommentoit mv-rivin #-merkillä ja katsot ajon jälkeen tuliko hakemistoon nuo kaksi juuri luotua hakemistoa. Lisää myös ls -l ennen mv:tä. Vastaavanlaista ongelmaa ei ole tullut vastaan viimeiseen viiteen vuoteen.

    Kysymysmerkki voisi olla myös ls:n tulostama. Oletuksena ls kai tulostaa muut kuin tulostettavissa olevat merkit kysymysmerkillä. Siinä tapauksessa ongelma voisi olla mkdir-rivien lopussa, eli olet mahdollisesti painanut ennen rivin loppua alt-space tms. normaalisti näkymättömän merkin. Katso siis mitä komento "ls -Q" tulostaa. Jos tulosteessa näkyy lainausmerkkien sisällä jotain muuta kuin hakemiston nimi, niin mkdir-rivin loppuun on jäänyt jotain roskaa (mikä ei normaalisti näy esim. catilla tulostettaessa).

    Äänestä

  • Mik kirjoitti:

    Minulla tuo toimi täysin oikein niin kuin oletinkin sen toimivan. Ulkoisestikaan tuossa skriptissä ei ole mitään vikaa. Mitä jos kommentoit mv-rivin #-merkillä ja katsot ajon jälkeen tuliko hakemistoon nuo kaksi juuri luotua hakemistoa. Lisää myös ls -l ennen mv:tä. Vastaavanlaista ongelmaa ei ole tullut vastaan viimeiseen viiteen vuoteen.

    Kysymysmerkki voisi olla myös ls:n tulostama. Oletuksena ls kai tulostaa muut kuin tulostettavissa olevat merkit kysymysmerkillä. Siinä tapauksessa ongelma voisi olla mkdir-rivien lopussa, eli olet mahdollisesti painanut ennen rivin loppua alt-space tms. normaalisti näkymättömän merkin. Katso siis mitä komento "ls -Q" tulostaa. Jos tulosteessa näkyy lainausmerkkien sisällä jotain muuta kuin hakemiston nimi, niin mkdir-rivin loppuun on jäänyt jotain roskaa (mikä ei normaalisti näy esim. catilla tulostettaessa).

    Joo, kokeilin tota ls -Q ja se näutti että esim. PDF dir on "PDF/r". Mistä toi johtuu. Okka. varmaan selvis nyt toi homma. Kun oon notepadilla tehny tota samalla kun teen windowsiin .BATia niin se varmaan heitti noi näkymättömät merkit. Muokkasin sitä picolla ja jo toimi.

    Äänestä

  • LuniX kirjoitti:

    Joo, kokeilin tota ls -Q ja se näutti että esim. PDF dir on "PDF/r". Mistä toi johtuu. Okka. varmaan selvis nyt toi homma. Kun oon notepadilla tehny tota samalla kun teen windowsiin .BATia niin se varmaan heitti noi näkymättömät merkit. Muokkasin sitä picolla ja jo toimi.

    Juuri kun meinasin vastata, että oletin sinun editoineen tuota tekstiä jollain muulla kuin Linuxilla/Unixilla, jotka eivät käytä rivinvaihdoissa \r:ää \n:n lisäksi, vaan pelkkää \n:ää. Sen takia \r sisältyi siihen hakemiston nimeen.

    Äänestä

Kommentoi aloitusta


LuniX kirjoitti:

Miten tehdä shell scripti joka saa parametreina 2 parametria ja käynnistää niillä Java ohjelman?

#
#
java Oma $1 $2

Jotenkin näin vai???

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu