DevOps-bootcamp · Oppitunti

Komentosarja-argumentit ja valitsimet ($@, $#, getopts)

Oppikaa välittämään argumentteja komentosarjoille ja jäsentämään komentorivin valitsimia erikoismuuttujien ja getopts-komennon avulla.

Oppitunti 3/412 vaihetta

Komentosarja-argumentit ja valitsimet ($@, $#, getopts) on ilmainen DevOps-bootcamp-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu DevOps-bootcamp-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. DevOps-bootcamp-kurssilla on yhteensä 4 oppituntia.

Komentojonon argumentit: miksi niitä käytetään?

Oletteko koskaan käyttäneet komentoa, kuten ls -l tai cp file1 file2? -l, file1 ja file2 ovat kaikki argumentteja! Ne kertovat komennolle, mitä tehdä tai mihin toimintaan kohdistua.

Bash-komentojonoissa argumentit tekevät komentojonoista joustavia. Arvojen kirjoittamisen suoraan koodiin sijaan komentojono voi vastaanottaa syötteen suoraan komentoriviltä suoritushetkellä.

Sijaintiparametrien käyttäminen

Kun suoritatte komentojonon argumenttien kanssa, Bash määrittää ne automaattisesti erityisiin muuttujiin, joita kutsutaan sijaintiparametreiksi.

  • Ensimmäinen argumentti on $1.
  • Toinen argumentti on $2.
  • Ja niin edelleen aina parametriin $9 asti.

Parametreihin 9 ylittäville argumenteille käytetään aaltosulkeita, kuten ${10}, ${11} ja niin edelleen. Nämä muuttujat sisältävät komentojonolle välitetyt arvot.

Esittely: sijaintiparametrit

Katsotaan, miten näitä argumentteja käytetään komentojonossa. Tallentakaa tämä nimellä greet.sh ja suorittakaa se komennolla ./greet.sh Alice Bob.

#!/bin/bash

echo "Hello, $1!"
echo "Welcome, $2."
echo "The third argument (if any) is: $3"

`$0` ja `$#`: komentojonon tiedot

Bash tarjoaa vielä muutamia erityisiä muuttujia, jotka antavat tietoja itse komentojonosta ja sen argumenteista:

  • $0: sisältää suoritettavan komentojonon nimen. Se on hyödyllinen virheilmoituksissa ja lokikirjauksessa.
  • $#: sisältää komentojonolle välitettyjen sijaintiparametrien kokonaismäärän.

Näiden avulla komentojonoista voi tehdä vikasietoisempia ja käyttäjäystävällisempiä.

Esittely: `$0` ja `$#`

Suorittakaa tämä komentojono eri argumenttimäärillä, esimerkiksi ./info.sh one two three tai pelkästään komennolla ./info.sh.

#!/bin/bash

echo "Script name: $0"
echo "Number of arguments received: $#"

`$@` ja `$*`: kaikki argumentit

Joskus kaikkiin argumentteihin täytyy viitata kerralla. Bash tarjoaa tähän kaksi tapaa:

  • $@: laajennetaan erillisiksi argumenteiksi. Kun arvo ympäröidään lainausmerkeillä ("$@"), kukin argumentti säilyy erillisenä sanana, vaikka se sisältäisi välilyöntejä. Tätä tapaa suositellaan yleensä silmukoissa.
  • $*: laajennetaan kaikkien argumenttien yhdeksi merkkijonoksi. Kun arvo ympäröidään lainausmerkeillä ("$*"), kaikki argumentit yhdistetään yhdeksi sanaksi ja erotetaan IFS-muuttujan ensimmäisellä merkillä (Internal Field Separator, yleensä välilyönti).

Käyttäkää argumentteja läpikäyvissä silmukoissa aina "$@"-muotoa, jotta välilyönnit säilyvät!

Esittely: silmukointi muodolla `"$@"`

Tämä komentojono näyttää, miten "$@" käsittelee oikein välilyöntejä sisältäviä argumentteja. Suorittakaa se esimerkiksi näin: ./loop_args.sh hello "world wide" web

#!/bin/bash

echo "Processing arguments with \"$@\":"
for arg in "$@"; do
  echo "  Argument: [$arg]"
done

echo "\nProcessing arguments with \"$*\":"
for arg in "$*"; do
  echo "  Argument: [$arg]"
done

Valitsimet: muutakin kuin sijaintiparametrit

Sijaintiparametrit sopivat yksinkertaisiin tilanteisiin, mutta entä jos komentojono tarvitsee valinnaisia lippuja tai nimettyjä parametreja, kuten -v yksityiskohtaiseen tulostukseen tai -f filename?

Tässä tilanteessa käytetään komentorivivalitsimia. Ne tekevät komentojonoista joustavampia ja käyttäjäystävällisempiä, koska käyttäjät voivat määrittää asetukset missä järjestyksessä tahansa.

Bash tarjoaa getopts-komennon juuri tällaisten valitsimien jäsentämiseen.

`getopts`-syntaksi: `optstring`

getopts-komennon perussyntaksi on: getopts optstring variable.

  • optstring: kelvollisten valitsinmerkkien merkkijono. Jos valitsin tarvitsee argumentin, kuten -f filename, merkin perään lisätään kaksoispiste (esimerkiksi f:).
  • variable: muuttujan nimi, johon getopts tallentaa parhaillaan käsiteltävän valitsinmerkin (esimerkiksi opt).

getopts asettaa myös OPTARG-muuttujan valitsimien argumentteja varten ja OPTIND-muuttujan seuraavan argumentin indeksiä varten.

Esittely: yksinkertainen `getopts`

Tämä komentojono käsittelee -v- (yksityiskohtainen tulostus) ja -f- (tiedosto) valitsimet. Kokeilkaa sitä esimerkiksi näin: ./options.sh -v -f mydata.txt -x tai ./options.sh -vf mydata.txt

#!/bin/bash

while getopts "vf:" opt; do
  case $opt in
    v)
      echo "Verbose mode enabled."
      ;;
    f)
      echo "File specified: $OPTARG"
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
  esac
done

Pikatarkistus: argumenttimuuttujat

Tarkastelkaa seuraavaa komentojonoa ja sen suorittamista:

#!/bin/bash
echo "Script: $0"
echo "Count: $#"
for arg in "$@"; do
  echo "Arg: $arg"
done

Jos suoritatte komennon: ./myscript.sh "Hello World" 123

Mikä tuloste olisi?

Kertaus: argumentit ja valitsimet

Hienoa työtä! Olette oppineet tekemään Bash-komentojonoistanne paljon monipuolisempia:

  • Sijaintiparametrit: käyttäkää argumentteihin suoraan viittaamiseen muuttujia $1, $2 ja niin edelleen.
  • Erityiset muuttujat: $0 sisältää komentojonon nimen, $# argumenttien määrän ja "$@" mahdollistaa kaikkien argumenttien turvallisen läpikäynnin.
  • Komentorivivalitsimet: käyttäkää getopts-komentoa nimettyjen valitsimien, kuten -v, ja niiden argumenttien, kuten -f filename, jäsentämiseen. Näin komentojonoista tulee vikasietoisempia ja käyttäjäystävällisempiä.

Harjoitelkaa näiden käyttöä omissa komentojonoissanne rakentaaksenne tehokkaita ja joustavia komentorivityökaluja!

Aloita maksutta

Opi DevOps-bootcamp tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
142
Oppitunnit
568

Usein kysytyt kysymykset

Onko oppitunti ”Komentosarja-argumentit ja valitsimet ($@, $#, getopts)” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa DevOps-bootcamp-oppimispolun 3 oppituntia, myös oppitunnin “Komentosarja-argumentit ja valitsimet ($@, $#, getopts)”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. DevOps-bootcamp-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Komentosarja-argumentit ja valitsimet ($@, $#, getopts)”?

Oppikaa välittämään argumentteja komentosarjoille ja jäsentämään komentorivin valitsimia erikoismuuttujien ja getopts-komennon avulla. Harjoittelet DevOps-bootcamp-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni DevOps-bootcamp-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin DevOps-bootcamp-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Komentosarja-argumentit ja valitsimet ($@, $#, getopts)”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä DevOps-bootcamp-oppitunnilla?

Kyllä. Jokainen DevOps-bootcamp-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Silmukkarakenteet (for, while)
  2. Funktiot Bash-komentosarjoissa
  3. Komentosarja-argumentit ja valitsimet ($@, $#, getopts)
  4. case-lause ja hahmontunnistus
← Takaisin: DevOps-bootcamp