használatával Shell szkripteket tanulok az informatikai diplomához. Olyan kis szkriptet próbálok írni, amely két számot ad hozzá, amint az az egyik bemutatónk látható.

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

Amikor azonban megadom, végrehajtási engedélyt és futtassa a szkriptet, ez adja nekem ezt a hibát.

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

írja ide a kép leírását

Megpróbáltam futtatni ezt mind az Ubuntu, mind a Fedora rendszeren, de ugyanaz a hiba fordul elő. Tudna valaki mondani valamit, ami itt hiányzik nekem? >

  • Kapcsolódó: unix.stackexchange.com/questions/40786/…
  • Válasz

    Először meg kell szabadulnia a feladat szóközeitől, pl.

    sum="expr $num1 + $num2" 

    akkor a " -et ` -re vagy még jobb :

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

    a expr helyett a számítást is elvégezheti közvetlenül a héjában:

    sum=$((num1 + num2)) 

    Megjegyzések

    • Ha a expr a $((...)) helyett az a vágy, hogy hordozható legyen a klasszikus Bourne-héjhoz, majd ' jó ötlet hogy elkerülje a $(...) -t is.
    • @AlanCurry Van-e olyan héj, amely nem támogatja a $() -et? Ha jól tudom, a posix előírja, pl. az összes posix kompatibilis héjnak támogatnia kell a $()
    • @UlrichDangel Az eredeti Bourne-héjnak nem volt ' “20f8b26919″>

    , de kb. Kihalt (lehet, hogy valahol valaki még mindig fut /bin/sh a Solaris-on).

  • A C Shell nem nem támogatja a $(…) –– vagy legalábbis nem az összes verziót.
  • Mi a célja annak, hogy kettős idézőjel legyen a változók körül?
  • Válasz

    Valószínűleg rosszul olvasta a backtickeket egyetlen idézőjelként a sorban:

    sum = "expr $num1 + $num2"

    Lásd Greg “Wikijét az $(...) használatával.

    Ez a várakozásoknak megfelelően működik:

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

    Vegye figyelembe azt is, hogy az egyenlőségjel (a változó hozzárendelés) körül nincsenek hézagok.

    Válasz

    expr egy külső program, amelyet a Bourne shell (azaz SH). A Bourne shell-nek eredetileg nem volt mechanizmusa az egyszerű számtan elvégzésére. expr külső programot használ a backtick segítségével.

    A backtick ( `) valójában parancshelyettesítésnek nevezzük. A parancshelyettesítés az a mechanizmus, amellyel a shell végrehajtja az adott parancskészletet, majd a kimenetüket helyettesíti a a parancsok helye.

    sum=`expr $num1 + $num2` 

    In bash (bourne again shell) a következő szisztax van, nem fogja használni az extrnal programot expr.

    sum=$((num1+num2)) 

    ha a expr külső programot akarjuk használni. a következő szisztax van:

    sum=$(expr $num1 + $num2) 

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük