Opiskelen parhaillaan IT-tutkintotodistuksen Shell-komentosarjoja. Yritän kirjoittaa pienen komentosarjan, joka lisää kaksi numeroa kuten meille annetuissa opetusohjelmissa on esitetty.

echo "Enter two numbers" read num1 num2 sum = "expr $num1 + $num2" echo "The sum is = $sum" 

Kuitenkin, kun annan sille Suorita käyttöoikeus ja suorita komentosarja, se antaa minulle tämän virheen.

sum: =. No such file or directory. sum: expr $num1 + $num2: No such file or directory 

kirjoita kuvan kuvaus tähän

Yritin suorittaa tämän sekä Ubuntussa että Fedorassa, mutta sama virhe tapahtuu. Voisiko joku kertoa minulle, mitä minulta puuttuu?

Kommentit

Vastaa

Ensin täytyy päästä eroon tehtävän välilyönneistä, esim.

sum="expr $num1 + $num2" 

sitten sinun on vaihdettava " arvoksi ` tai vielä parempi – $():

sum=$(expr "$num1" + "$num2") 

expr -kohdan käyttämisen sijaan voit myös suorittaa laskutoimituksen ulaatio suoraan kuoressa:

sum=$((num1 + num2)) 

Kommentit

  • Jos motivaatio expr $((...)) sijaan on halu olla siirrettävissä klassiseen Bourne-kuoreen, sitten se ' on hyvä idea välttää myös $(...).
  • @AlanCurry Onko kuoria, jotka eivät tue $()? Sikäli kuin tiedän, sitä vaatii posix, esim. kaikkien posix-yhteensopivien kuorien tulisi tukea $()
  • @UlrichDangel Alkuperäisessä Bournen kuoressa ei ollut ' t $(…), mutta se on melkein kuollut (ehkä joku jonnekin on edelleen käynnissä /bin/sh Solariksessa).
  • C-kuori ei t eivät tue $(…) –– tai ainakaan kaikkia versioita.
  • Mikä on tarkoitus, että muuttujien ympärillä on lainausmerkit?

Vastaa

Olet todennäköisesti lukenut väärin vain yhden lainausmerkin rivillä:

sum = "expr $num1 + $num2"

Katso Gregin Wiki , kun käytät sen sijaan $(...).

Tämä toimii odotetulla tavalla:

sum=$(expr "$num1" + "$num2")

Huomaa myös, että yhtälömerkin (muuttujamäärityksen) ympärillä ei ole aukkoja.

Vastaus

expr on ulkoinen ohjelma, jota Bourne-kuori (eli sh). Bourne-kuorella ei ollut alun perin mitään mekanismia yksinkertaisen laskutoimituksen suorittamiseksi. Se käyttää ulkoista ohjelmaa expr backtickin avulla.

Taaksepäin ( `) kutsutaan itse asiassa komennon korvaukseksi. Komennon korvaaminen on mekanismi, jolla kuori suorittaa tietyn komentojoukon ja korvaa sitten niiden tuotoksen komentojen paikka.

sum=`expr $num1 + $num2` 

Kohdassa bash (bourne again shell) sillä on seuraava systax, se ei käytä ulkopuolista ohjelmaa expr.

sum=$((num1+num2)) 

jos haluamme käyttää ulkoista ohjelmaa expr. meillä on seuraava systax:

sum=$(expr $num1 + $num2) 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *