Mitenhän tämä pitäisi tehdä, kun komennolle voidaan antaa useampi parametri, ja yhtä niistä pitäisi testata ja toimia sen mukaan mikä parametrin sisältö on.
if [ $1 = "chromiun-browoser" ];
then
set "chromium-browser"
fi
if [ $2 = "chromiun-browoser" ];
then
set "chromium-browser"
fi
Tuossa toisen ( if ) testin tuloksena tulee virhe, ellei komennon saatteeksi annettukaan toista parametria. Kuvitellaan nyt vaikka että on kyseessä ( whereis ) komennon suomentaminen, ja kun whereis -komento sisältää ainakin -b valitsimen jolla pyydetään vain binaari tiedoston sijaintia, eli näin
missä -b chromiun-browoser
Tuo tulisi toimimaan oikein, kun missä komennolle annetaan 2 parametria, mutta tästä alla olevasta tuleekin jo virhe:
missä chromiun-browoser
Miten tämä testi tulisi tehdä oikein?
if ehdon testaaminen tuottaa virheen
17
139
Vastaukset
- Anonyymi
täällä ei saa neuvoa, kun siitä menee moderaattorille hiekkaa pimppiin, ja hän poistaa kaikki mitä ei ymmärrä (=kaiken). mutta $* on siis argumenttien välitys.
- Anonyymi
Aivan, tässä tapauksessa $1 sisältää joko arvon "chromiun-browoser" tai "-b"
ja $2 on joko tyhjä tai "chromiun-browoser", joten kun if lauseella testataan tyhjää muuttujaan saadaan sillä virhe aikaan. Jollakin tavoin tuo testaaminen pitäisi hoitaa ilman virheitä. Sanottakoon vielä että "$@" taas sisältää sekä "$1" että "$2" arvon. - Anonyymi
Aivan, suomi24 ei saa tuota moderointiaan kuntoon ikinä, se tulee olemaan ainainen kiusa. Jakun ne vielä syyttää käyttäjää sääntöjen rikkomisesta, vaikka vika on heissä itsessään. Tämä on tahallista kiusantekoa suomi24 ylläpidolta.
- Anonyymi
Anonyymi kirjoitti:
Aivan, suomi24 ei saa tuota moderointiaan kuntoon ikinä, se tulee olemaan ainainen kiusa. Jakun ne vielä syyttää käyttäjää sääntöjen rikkomisesta, vaikka vika on heissä itsessään. Tämä on tahallista kiusantekoa suomi24 ylläpidolta.
mäkin oon siirtynyt ylilaudalle lähes kokonaan. tänne viimeksi kirjoittanut joskus kuukausi sitten, nyt kokeilin tuon neuvon laittaa, niin tokihan siitä moden pimpsa hiekottui.
ei ihme, että täällä väki vähenee ja ylilaudalla lisääntyy. - Anonyymi
Miksi sotket kun et osaa?
- Anonyymi
Parametrien parserointi skriptissä kannattaa tehdä getopts:n avulla etenkin sillon, jos halutaan että parametrejä voi antaa missä järjestyksessä tahansa, sillon kun kaikkia parametrejä ei ole aina pakko antaa ja sillon kun joillekin parametreille voi antaa arvon. Ylipäätänsä, jos skriptistä halutaan asiallisemman oloinen niin getopts:n käyttö on hyvä idea. Tässä on pätkä yhdestä omasta skriptistäni, jota toki voisi vielä parannella. En tässä tarkemmin selitä skriptin tarkotusta, mutta jokatapauksessa tästä pätkästä näkyy kuinka parametreja voi parseroida. Tuossa parametreille -f ja -m voi antaa arvon, joka on luettavissa muuttujasta OPTARG
getopts:n avulla voi tehdä skriptejä, joille voi antaa parametrejä kuten -f , mutta getopts ei tue parametrien antamista muodossa --file jne. Jos halutaan mahdollisuus käyttää esim optiota --file niin sillon parserointi pitää tehdä toisin.
if [ $# -eq 0 ]
then
echo "$0: missing operand"
echo "Try '$0 --help' for more information."
exit 1
fi
# Initialize internal variables
SCANNER_OPTIONS=""
FILE="false"
SHOW_DIALOG="false"
SHOW_NOTIFICATION="false"
# Parse command line options
while getopts "df:hm:nr" OPTION; do
case $OPTION in
d)
SHOW_DIALOG="true"
;;
f)
FILE="true"
SCANNER_OPTIONS="$SCANNER_OPTIONS -f $OPTARG"
;;
h)
show_help
exit 0
;;
m)
SCANNER_OPTIONS="$SCANNER_OPTIONS -m $OPTARG"
;;
n)
SHOW_NOTIFICATION="true"
;;
r)
SCANNER_OPTIONS="$SCANNER_OPTIONS -r"
;;
\?)
exit 1
;;
esac
done
T. miksuh- Anonyymi
Nyt tuli niin paljon tekstiä koodin muodossa että otin *.PDF kopion, siltä varalta että poistavat tapansa mukaan. Kirjoitin tämän että viesti on saatu ja syvennyn siihen mitä se pitää sisällään.
- Anonyymi
Niin ja lisään vielä sen, että getopts mahdollistaa toki sen, että skriptille voidaan antaa parametina jotain tekstiä jne muutenkin kuin jonkinesim -f parametrin arvona. Eli toki voidaan tehdä skripti, jota voi käyttää näillä vaihtoehtoisilla tavoilla:
skripti tiedoston_nimi
skripti -f tiedoston_nimi
Kannattaa lukea netistä enempi ohjeita getopts liittyen.
T. miksuh - Anonyymi
T. miksuh
Joo, kyllä varmaan getopts ja case tämän ratkaisee, mutta tuntuu vain raskaalta ratkaisulta. Siinä tapauksessa ettei ( if ) lauseella asiaa saada ratkaistuksi, on kai tähän mentävä. Odotan vielä mahdollisia vastauksia lisää. - Anonyymi
Anonyymi kirjoitti:
T. miksuh
Joo, kyllä varmaan getopts ja case tämän ratkaisee, mutta tuntuu vain raskaalta ratkaisulta. Siinä tapauksessa ettei ( if ) lauseella asiaa saada ratkaistuksi, on kai tähän mentävä. Odotan vielä mahdollisia vastauksia lisää.No voithan toki tarkistaa kuinka monta parametriä skriptille annettiin ja toimia sen mukaan. Tuossa mun antamassani esimerkissä tarkistetaan aivan ekana skriptille annettujen parametrien määrä ja jos skriptille ei annettu parametrejä, niin sitten kerrotaan käyttäjälle, että skripti odottaa saavansa jotain parametreja ja neuvotaan käyttämään parametriä -h avun saamiseksi.
Eli muuttuja $# sisältää aina skriptille annettujen parametrien lukumäärän. Jos lukumäärä on suurempi kuin 1 voit sitten tarkistaa sekä muuttujan $1 että $2 sisällön. Eli jos parametreja annettiin enemmän kuin 1 tarkista onko $1 arvona esim "-b" ja $2 arvona esim "chromium-browser". Jos parametreja annettiin vain yksi tarkista silloin vain muuttujan $1 arvo.
T. miksuh - Anonyymi
Anonyymi kirjoitti:
No voithan toki tarkistaa kuinka monta parametriä skriptille annettiin ja toimia sen mukaan. Tuossa mun antamassani esimerkissä tarkistetaan aivan ekana skriptille annettujen parametrien määrä ja jos skriptille ei annettu parametrejä, niin sitten kerrotaan käyttäjälle, että skripti odottaa saavansa jotain parametreja ja neuvotaan käyttämään parametriä -h avun saamiseksi.
Eli muuttuja $# sisältää aina skriptille annettujen parametrien lukumäärän. Jos lukumäärä on suurempi kuin 1 voit sitten tarkistaa sekä muuttujan $1 että $2 sisällön. Eli jos parametreja annettiin enemmän kuin 1 tarkista onko $1 arvona esim "-b" ja $2 arvona esim "chromium-browser". Jos parametreja annettiin vain yksi tarkista silloin vain muuttujan $1 arvo.
T. miksuhHetkinen, tässä se ratkaisu taitaa olla, testaamaan menin.
- Anonyymi
Anonyymi kirjoitti:
No voithan toki tarkistaa kuinka monta parametriä skriptille annettiin ja toimia sen mukaan. Tuossa mun antamassani esimerkissä tarkistetaan aivan ekana skriptille annettujen parametrien määrä ja jos skriptille ei annettu parametrejä, niin sitten kerrotaan käyttäjälle, että skripti odottaa saavansa jotain parametreja ja neuvotaan käyttämään parametriä -h avun saamiseksi.
Eli muuttuja $# sisältää aina skriptille annettujen parametrien lukumäärän. Jos lukumäärä on suurempi kuin 1 voit sitten tarkistaa sekä muuttujan $1 että $2 sisällön. Eli jos parametreja annettiin enemmän kuin 1 tarkista onko $1 arvona esim "-b" ja $2 arvona esim "chromium-browser". Jos parametreja annettiin vain yksi tarkista silloin vain muuttujan $1 arvo.
T. miksuhJa siinä se oli, 3 lisä rivi siitä tuli, ja se on hyvä, Kiitos.
- Anonyymi
Muistaakseni siellä ei saa olla ylimääräisä välilyöntejä ($1 = jotain vs $1=jotain).
- Anonyymi
Näin on, välilyönti muuttuja määrittelyssä näin: ( a = "terve" ) tuottaa virheilmoituksen ( a: komentoa ei löytynyt ).
- Anonyymi
Niin lisään vielä sen, että jos skriptille annettiin kaksi parametria, niin sillon tietenkin pitää ensin testata onko muuttujan $1 arvo esimerkiksi "-b" minkä jälkeen toimitaan sen mukaan oliko se vai ei. Jos muuttujan $1 arvo oli esim haluttu "-b" niin sillon testataan seuraavaksi mikä skriptille annetun toisen parametrin sisältävänmuuttujan $2 arvo on. Eli voit laittaa muuttujan $2 testaavan if-lauseen muuttujan $1 testaavan if-lauseen sisälle. Eli voit käyttää sisäkkäisiä if-lauseita, jollon sisempi if-lause suoritetaan vain, jos ulomman if-lauseen ehtolauseen arvo on tosi.
Itse olen kyllä sitä mieltä, että jos skriptillä on vähänkään enemmän mahdollisia parametreja, joita käyttäjä voi skriptille antaa, niin skriptin parametien parseroinnista if-lauseiden avulla tulee äkkiä sotkuista ja sekavaa. Sillon on paljon parempi käyttää getopts:a, jonka avulla skriptistä tulee siistimpi, asiallisempi ja joustavampi käyttäjän kannalta. Järkevän skriptin tulisi ottaa huomioon sekin, että käyttäjä saattaa antaa parametrit periaatteessa missä järjestyksessä ahansa. Eli esimerkiksi kumpi tahansa näistä:
skripti -a -b
skripti -b -a
T. miksuh
Ketjusta on poistettu 1 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
SDP haluaa LISÄÄ veroja bensa-autoille!
Sdp:n vaihtoehtobudjetti esittää polttomoottoriautoille lisää veroja Sdp esittää tuoreessa vaihtoehtobudjetissaan verot27918462Riikka se jytkytti BKT:stä nyt 0,3 prosenttia pois
Ja vain kolmessa kuukaudessa! Vuositasollahan tuo tarkoittaa reilun prosentin pudotusta. Pärjäisi varmaan lasketteluss10110590Mihin kaikkeen sinä ihastuit hänessä
Mikä oli se asia mikä vei jalat altasi? ❤️ Oliko jotain erityistä tilannetta vai tunne? Kenties monen sattuman summa? Ai877713Vasemmistoaate on aatteista jaloin
Kaikki saavat ja kukaan ei jää ilman. Kuka tuollaista voisi vastustaa?4397195Persut: haluamme lisää veroja!
Lisää lisää veroja huutaa persukuoro. Veroila Suomi nousuun! "Uusi matkailuvero eli matkailijamaksu peritään esimerki424688Nainen kokki autossa kammottavan kuoleman sähköauto-Teslan syttyessä tuleen.
https://www.is.fi/autot/art-2000011652873.html Näin vaarallisia sähköautopalot voivat olla.414301Brittiläinen vasemmistolehti: Sanna Marin oli vihdoin rehellinen
Nyt tulee pahasti lunta tupaan Seiskan tähtitytölle. Ex-pääministerin kirjaa arvostellaan latteuksista ja itsekehusta.853504"Purra löylytti oppositiota", sanoi naistoimittaja Pöllöraadissa
Kyllä, Purra tekee juuri sitä työtä mitä hänen tuossa asemassa pitää tehdä, hän antaa oppositiolle takaisin samalla mita1243038Alexander C. G. riisti demari-Veijolta arvonimen
"Stubb myönsi 66 arvonimeä ja peruutti yhden arvonimen. Presidentti Tarja Halonen myönsi Baltzarille kulttuurineuvoksen972595Jos samassa autossa istuu romani, somali ja venäläinen, kuka ajaa?
Arvioiden mukaan romanit lähtivät noin 1000-luvulla liikkeelle pohjois-Intiasta. Nyt 1000 vuotta myöhemmin he ovat levit402467