muuttujien vertailua

test $i1 != $i2 && /somedir/somescript

vertaa kahta muuttujaa toisiinsa, ja ajaa skriptin jos arvot eivät täsmää. Neljän muuttujan kanssa voidaan tehdä

test $i1 != $i2 && /somedir/somescript
test $i3 != $i4 && /somedir/somescript

Saako tätä yksinkertaistettua yhteen lauseeseen siten, että /somedir/somescript ajetaan mikäli kummassa tahansa vertailussa arvot eroavat mutta jos kummassakaan ei eroa ole mitään ei tapahdy?

Mikäli ei, voiko saman tehdä rakenteella if [ $i1 -ne $i2 ]?
984
Äänestä

Muut lukivat myös

Vastaukset 9

Vanhimmat

if [ $i1 != $i2 -o $i3 != $i4 ]; then
/somedir/somescript
fi

Äänestä

No jup. Olin kokeilevinani tuota illan mittaan eikä suostunut toimimaan. Mitä lienen typoillut. Tuo passaa hyvin, kiitoksin :-)

Äänestä
  • Puhumattakaan siitä että aika karseaa on opetella ohjelmointitapoja joihin ei näköjään kuulu else osat ehtolauseisiin. Expect the unecpected...

    Äänestä

  • ysiteist kirjoitti:

    Puhumattakaan siitä että aika karseaa on opetella ohjelmointitapoja joihin ei näköjään kuulu else osat ehtolauseisiin. Expect the unecpected...

    @ysiteist - Nyt meni kyllä täysin ohi. Jos ei tarvita kahta toiminnetta, mitäs sitä sinne sotkemaan? Elseä pannaan kun panettaa ;-)

    Äänestä

  • muuttuillaan kirjoitti:

    @ysiteist - Nyt meni kyllä täysin ohi. Jos ei tarvita kahta toiminnetta, mitäs sitä sinne sotkemaan? Elseä pannaan kun panettaa ;-)

    Oli kommentti vähän samaa luokkaa kuin tutulla alan opiskelijalla joka tuli pyytämään apua php;n kanssa. Aloitin jamit sanomalla "ensin tutkitaan syöte ettei siellä ole jaskaa" ja vastaus oli "ei mul ole aikaa tollasiin turhanpäiväisiin turvallisuushökötyksiin eikä niistä ole opettajatkaan mitään puhunut".

    Tuossakin on nyt aika paha miina, skripti ajetaan jos ehto täyttyy mutta jos ei täyty, ei ajeta - eikä myöskään tehdä tilalle mitään muuta kuten kerrota käyttäjälle että skriptiä ei ajeta sen enempää kuin syytä miksi ei ajettu.

    Toimii ehkä jos käyttäjiä ei ole kuin yksi joka tuntee palikkansa läpikotaisin mutta mikä on tällaisen käytettävyys sellaiselle userille joka ei tunne kikkulan sielunelämää, yrittää ajaa sen ja ainoa näkyvä tulos on ei mitään.

    Ehkä tuollainen käytös on jonkun mielestä softalle toivottavaa. Minä en kyllä kahta kertaa edes yritä ajaa kikkaretta joka ei anna mitään palautetta jos tulee virhe tai suoritus keskeytyy yks kaks yllättäen vaan moinen bittijäte katoaa koneelta ennen kuin ehdit edes sanoa foo.

    Äänestä

  • ysiteist kirjoitti:

    Oli kommentti vähän samaa luokkaa kuin tutulla alan opiskelijalla joka tuli pyytämään apua php;n kanssa. Aloitin jamit sanomalla "ensin tutkitaan syöte ettei siellä ole jaskaa" ja vastaus oli "ei mul ole aikaa tollasiin turhanpäiväisiin turvallisuushökötyksiin eikä niistä ole opettajatkaan mitään puhunut".

    Tuossakin on nyt aika paha miina, skripti ajetaan jos ehto täyttyy mutta jos ei täyty, ei ajeta - eikä myöskään tehdä tilalle mitään muuta kuten kerrota käyttäjälle että skriptiä ei ajeta sen enempää kuin syytä miksi ei ajettu.

    Toimii ehkä jos käyttäjiä ei ole kuin yksi joka tuntee palikkansa läpikotaisin mutta mikä on tällaisen käytettävyys sellaiselle userille joka ei tunne kikkulan sielunelämää, yrittää ajaa sen ja ainoa näkyvä tulos on ei mitään.

    Ehkä tuollainen käytös on jonkun mielestä softalle toivottavaa. Minä en kyllä kahta kertaa edes yritä ajaa kikkaretta joka ei anna mitään palautetta jos tulee virhe tai suoritus keskeytyy yks kaks yllättäen vaan moinen bittijäte katoaa koneelta ennen kuin ehdit edes sanoa foo.

    Älä sinä lue tuota koodia. Se on tehty sille joka ymmärtää jotain ohjelmoinnista.

    Äänestä

  • ysiteist kirjoitti:

    Puhumattakaan siitä että aika karseaa on opetella ohjelmointitapoja joihin ei näköjään kuulu else osat ehtolauseisiin. Expect the unecpected...

    #!/bin/bash

    MODE="not-horny"
    ### MODE="horny"

    if [ "$MODE" != "horny" ]; then
    echo "Elseä ei panna"
    else
    echo "Elseä pannaan"
    fi

    Äänestä

  • ysiteist kirjoitti:

    Oli kommentti vähän samaa luokkaa kuin tutulla alan opiskelijalla joka tuli pyytämään apua php;n kanssa. Aloitin jamit sanomalla "ensin tutkitaan syöte ettei siellä ole jaskaa" ja vastaus oli "ei mul ole aikaa tollasiin turhanpäiväisiin turvallisuushökötyksiin eikä niistä ole opettajatkaan mitään puhunut".

    Tuossakin on nyt aika paha miina, skripti ajetaan jos ehto täyttyy mutta jos ei täyty, ei ajeta - eikä myöskään tehdä tilalle mitään muuta kuten kerrota käyttäjälle että skriptiä ei ajeta sen enempää kuin syytä miksi ei ajettu.

    Toimii ehkä jos käyttäjiä ei ole kuin yksi joka tuntee palikkansa läpikotaisin mutta mikä on tällaisen käytettävyys sellaiselle userille joka ei tunne kikkulan sielunelämää, yrittää ajaa sen ja ainoa näkyvä tulos on ei mitään.

    Ehkä tuollainen käytös on jonkun mielestä softalle toivottavaa. Minä en kyllä kahta kertaa edes yritä ajaa kikkaretta joka ei anna mitään palautetta jos tulee virhe tai suoritus keskeytyy yks kaks yllättäen vaan moinen bittijäte katoaa koneelta ennen kuin ehdit edes sanoa foo.

    @ysiteist, KISS.

    Ei koneelle tarvitse erikseen kertoa, etta arvojen tasmatessa ei suoriteta jatkotoimenpiteita. Skriptia ajetaan cronilla, eli jos se ei kaynnisty etsitaan vikaa ihan muualta.

    Äänestä

Kommentoi aloitusta


muuttuillaan kirjoitti:

test $i1 != $i2 && /somedir/somescript

vertaa kahta muuttujaa toisiinsa, ja ajaa skriptin jos arvot eivät täsmää. Neljän muuttujan kanssa voidaan tehdä

test $i1 != $i2 && /somedir/somescript
test $i3 != $i4 && /somedir/somescript

Saako tätä yksinkertaistettua yhteen lauseeseen siten, että /somedir/somescript ajetaan mikäli kummassa tahansa vertailussa arvot eroavat mutta jos kummassakaan ei eroa ole mitään ei tapahdy?

Mikäli ei, voiko saman tehdä rakenteella if [ $i1 -ne $i2 ]?

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