Be tudom olvasni a számokat és a műveletet a következővel:
echo "First number please" read num1 echo "Second number please" read num2 echo "Operation?" read op
de akkor minden sikertelen kísérleteim a számok hozzáadására:
case "$op" in "+") echo num1+num2;; "-") echo `num1-num2`;; esac
Futtatás:
First number please 1 Second mumber please 2 Operation? +
Kimenet:
num1+num2
… vagy …
echo $num1+$num2;; # results in: 1+2
… vagy. ..
echo `$num1`+`$num2`;; # results in: ...line 9: 1: command not found
Úgy tűnik, hogy még mindig húrokat kapok, amikor megpróbálom hozzáadni az add (“2” és “2” helyett “4” -t).
Megjegyzések
Válasz
A számtan a POSIX héjakban a $
és a dupla zárójelekkel (( ))
:
echo "$(($num1+$num2))"
Ebből rendelhet (sans echo
):
num1="$(($num1+$num2))"
Van még expr
:
expr $num1 + $num2
A szkriptekben $(())
előnyösebb, mivel elkerüli az elágazást / végrehajtást a expr
parancsnál.
Megjegyzések
- Vagy akár közvetlenül
echo $(($num1$op$num2))
anélkül, hogy bevonnácase
. - Ott ' s nem
case
érintett itt. - Nem, de a literal
+
szót használta, ezért szüksége lesz acase
kívülről, hogy külön kezelje a kivonást. - @manatwork: Mea n szüntesse meg a
case
-t az OP ' OP kódbólecho $(($num1$op$num2))
-vel – ez működni fog , de acase
használata robusztusabb, mivel a hibákat alapértelmezett*
használatával kezelheti. - +1 mindketten. Case-t használtam (lehet, hogy az elején nem mutattam volna meg), de mivel mindketten rájöttek, a probléma nem ' volt az eset kapcsán.
Válasz
A meglévő válasz tiszta bash, tehát ennél gyorsabb lesz, de csak egész számokat képes kezelni. Ha úszókat kell kezelnie, akkor a bc
külső programot kell használnia.
$ echo "scale=4;3.1415+9.99" | bc 13.1315
A scale=4
megadja a bc
négy tizedesjegy használatát. További információ: man bc
.
Megjegyzések
- Ne feledje, hogy míg
bash
nem ' nem támogatja a lebegőpontos aritmetikát$((...))
, sok kagylóval (ksh93
,zsh
,yash
legalábbis). Abc
előnye, hogy tetszőleges pontosságot támogat, míg a shell aritmetika csak a processzorra korlátozódik ' sdouble
típusú. Ne feledje, hogy nem kell ' itt beállítania ascale
beállítást. A kiegészítésekhez ascale
paramétert nem használják. A3.1415+9.99
skála az operandusok skálájából származik (itt 4). - Hogyan kell elvégezni a matematikát, ha az egyik érték
450
és a másik tizedesjegyű a$mynumber
változóban? Például:450-$mynumber
. - @sigur
echo "450-$mynumber" | bc
meg kell tennie. Ha egy változó kibővül, dupla idézőjeleket kell használnia, nem pedig egyes idézőjeleket. - @evilsoup, most varázslatként működik. Köszönet.
-
computedval=$(echo 'scale=10;var1-var2' | bc)
nem működik, ' nem működik, és nem működikcomputedval=$(echo 'scale=10;$var1-$var2' | bc)
Válasz
Használhatja a $[ ... ]
struktúrát is. Ebben az esetben a Bash-ban beépített mechanizmust használunk, amely gyorsabb és valamivel kényelmesebb a használata. Mivel tudjuk, hogy a $ [, és] között mindent kifejezésként kezelünk, nem kell a változókat megelőznünk a $
jellel. Hasonlóképpen, nem kell a *
attól, hogy mintaként kezelje.
num1=2 num2=3 echo $[num1 + num2] 5
Válasz
echo `expr $a + $b` echo `expr $a - $b` echo `expr $a \* $b` echo `expr $a / $b`
Vegye figyelembe a \
-et a *
előtt (szorzáshoz), az egész kifejezésnek a back quote-okon belül kell lennie.
Megjegyzések
-
expr
nem szükséges, és ' soha A parancs normál kimenetének rögzítéséhez csak a normál kimenetre való visszaíráshoz van szükség.
Válasz
minimalista
total=0 ((total+=qty))
Válasz
A felhasználótól kért bemenetek sorrendje alapján , úgy tűnik, hogy fordított lengyel jelölést használ.
echo "First number please" read num1 echo "Second number please" read num2 echo "Operation?" read op
Jobban járhat, ha közvetlenül használja a dc
(asztali számológép) alkalmazást, mivel erre szolgál.
DESCRIPTION Dc is a reverse-polish desk calculator which supports unlimited pre- cision arithmetic.
E xample munkamenet a dc
használatával:
$ dc 1 2 + p # This part is typed; the result comes next. 3 q # This is also typed. $
Vagy nem interaktív módon:
$ dc -e "1 2 + p" 3 $
case
vagy bármi, kivéve egy sort:echo $num+$num
, mivel az pontosan megismétli a problémát . A programozási kérdések kontextusát itt magyarázzuk el: sscce.org