Voin lukea numerot ja operaation:
echo "First number please" read num1 echo "Second number please" read num2 echo "Operation?" read op mutta sitten kaikki yritykseni lisätä numeroita epäonnistuvat:
case "$op" in "+") echo num1+num2;; "-") echo `num1-num2`;; esac Suorita:
First number please 1 Second mumber please 2 Operation? + Tulos:
num1+num2 … tai …
echo $num1+$num2;; # results in: 1+2 … tai. ..
echo `$num1`+`$num2`;; # results in: ...line 9: 1: command not found Näyttää siltä, että saan merkkijonoja vielä ehkä, kun yritän lisätä add (”2 + 2” eikä ”4”).
Kommentit
Vastaa
  POSIX-kuorien aritmeetti  tehdään $ – ja kaksoissulkeilla (( )): 
echo "$(($num1+$num2))"  Voit määrittää siitä (sans echo): 
num1="$(($num1+$num2))"  Mukana on myös expr: 
expr $num1 + $num2  Komentosarjoissa $(()) on suositeltava, koska se välttää haarukan / suorituksen komennolle expr. 
Kommentit
-  Tai jopa suoraan echo $(($num1$op$num2))ilmancase.
-  Siellä ' s ei casemukana tässä.
-  Ei, mutta käytit kirjaimellista +, joten tarvitsetcaseulkopuolella käsittelemään vähennystä erikseen.
-  @manatwork: Sinä n eliminoi caseOP ' -koodistaecho $(($num1$op$num2))– se toimii , muttacaseon vakaampi, koska voit käsitellä virheitä oletusarvoisella*.
- +1 molemmat teistä. Käytin tapausta (ei ehkä ole osoittanut sitä alussa), mutta kun molemmat huomasit, ongelma ei ollut ' t tapauksesta.
Vastaus
 Nykyinen vastaus on puhdas bash, joten se on nopeampi kuin tämä, mutta se pystyy käsittelemään vain kokonaislukuja. Jos haluat käsitellä kellukkeita, sinun on käytettävä ulkoista ohjelmaa bc. 
$ echo "scale=4;3.1415+9.99" | bc 13.1315  scale=4 kehottaa bc käyttämään neljää desimaalia. Katso lisätietoja kohdasta man bc. 
Kommentit
-  Huomaa, että kun bashei tue ' ei tue kelluvaa aritmeettisuutta$((...)): llä, monilla kuorilla (ksh93,zsh,yashainakin).bc: n etuna on, että se tukee mielivaltaista tarkkuutta, kun taas kuoren aritmeettisuus on rajoitettu prosessoriin ' sdouble-tyyppi. Huomaa, että sinun ' ei tarvitse asettaascaletähän. Lisäyksiä varten parametriascaleei käytetä. Asteikko3.1415+9.99johdetaan operandien asteikosta (tässä 4).
-  Kuinka tehdä matematiikka, jos yksi arvo on 450ja toinen on desimaalimuisti muuttujaan$mynumber? Esimerkiksi450-$mynumber.
-  @sigur echo "450-$mynumber" | bcpitäisi tehdä se. Jos haluat muuttujan laajentuvan, sinun on käytettävä kaksoislainauksia yksittäisten lainausten sijaan.
- @evilsoup, nyt se toimii kuin viehätys. Kiitos.
-  computedval=$(echo 'scale=10;var1-var2' | bc)ei toimi ' eikä toimicomputedval=$(echo 'scale=10;$var1-$var2' | bc)
Vastaa
 Voit käyttää myös rakennetta $[ ... ]. Tässä tapauksessa käytämme Bashissa sisäänrakennettua mekanismia, joka on nopeampi ja hieman kätevämpi käyttää. Koska tiedämme, että kaikkea välillä $ [, ja] käsitellään lausekkeena, meidän ei tarvitse edetä muuttujia merkillä $. Samoin meidän ei tarvitse suojata * käsittelemästä sitä mallina.
num1=2 num2=3 echo $[num1 + num2] 5 vastaus
echo `expr $a + $b` echo `expr $a - $b` echo `expr $a \* $b` echo `expr $a / $b`  Huomaa \ ennen * (kertolasku), koko lausekkeen on oltava backoteissa ”. 
Kommentit
-  exprei ole tarpeen, ja se ' ei koskaan on tarpeen kaapata komennon vakiolähtö vain sen kirjoittamiseksi takaisin vakiotulostukseen.
Vastaa
minimalistinen
total=0 ((total+=qty)) vastaus
Perustuu käyttäjältä pyytämiesi syötteiden sarjaan , näyttää siltä, että käytät käänteisen puolan merkintää.
echo "First number please" read num1 echo "Second number please" read num2 echo "Operation?" read op
 Voit tehdä paremmin, jos käytät suoraan dc (työpöydän laskin) -palvelua, koska se on sitä varten. 
DESCRIPTION Dc is a reverse-polish desk calculator which supports unlimited pre- cision arithmetic.  E xample-istunto käyttämällä dc: 
$ dc 1 2 + p # This part is typed; the result comes next. 3 q # This is also typed. $ Tai ei-vuorovaikutteisesti:
$ dc -e "1 2 + p" 3 $ 
casetai mikä tahansa muu kuin yksi rivi:echo $num+$num, koska tämä toistaa ongelman tarkalleen . Idea minimoimalla ohjelmointikysymysten konteksti selitetään täällä: sscce.org