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 ]?
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 ]?
Vastaukset 9
Vanhimmat
if [ $i1 != $i2 -o $i3 != $i4 ]; then
/somedir/somescript
fi
No jup. Olin kokeilevinani tuota illan mittaan eikä suostunut toimimaan. Mitä lienen typoillut. Tuo passaa hyvin, kiitoksin :-)
Noissa if testeissä on muutes helppo tehdä typoja...
http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
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 ;-)
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.
#!/bin/bash
MODE="not-horny"
### MODE="horny"
if [ "$MODE" != "horny" ]; then
echo "Elseä ei panna"
else
echo "Elseä pannaan"
fi
@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.