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
94
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
Saako kantaa asetta
Voiko olla koskaan kotelossa lonkalla ase.. Siis ei mikään luvaton ase. Johon on luvat. Esim luottamustoimessa, tai kaup272684Mies mitä ajattelet naisista?
Kerro mitä ajatuksia nousee. Mitä naiset sinulle merkitsee? Sana on vapaa.1192632Mitä laitatte karjalanpiirakan päälle?
Voita tietenkin, mutta mitä muuta? Itse yleensä juustoa, jotain leikkelemakkaraa ja tuorekurkkua342081Kerro kaivattusi
Jokin tapa/piirre mikä sinua viehättää ja mistä hän voisi myös tunnistaa itsensä.592043Vakkuri puhuu että Suomi joutuu sotaan.
Hänen mukaansa asiantuntijat ovat yhtä mieltä että Suomi joutuu sotaan Venäjän kanssa. En tiedä kuinka lähellä se on, mu4001557- 601123
- 2591049
- 541047
- 151956
- 45938