it-swarm-eu.dev

Přidání dvou čísel pomocí příkazu expr

Učím se Shell psát pro diplom v oblasti IT, který právě dělám. Snažím se napsat malý skript, který přidá dvě čísla, jak je uvedeno v jednom z tutoriálů, které jsme dostali.

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

Když mu však udělím oprávnění ke spuštění a spustím skript, bude mi tato chyba.

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

enter image description here

Zkusil jsem to spustit na Ubuntu i Fedoře, ale vyskytla se stejná chyba. Může mi někdo prosím říct, co mi tady chybí?

13
Isuru

Nejprve se musíte zbavit mezer pro zadání, např

sum='expr $num1 + $num2'

pak musíte změnit ' na ` nebo ještě lépe $():

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

namísto použití expr můžete také provést výpočet přímo v Shell:

sum=$((num1 + num2))
39
Ulrich Dangel

Pravděpodobně jste špatně přečetli backticks jako jednoduché uvozovky v řádku:

sum = 'expr $num1 + $num2'

Viz Gregova Wiki o použití $(...) místo toho.

Funguje to podle očekávání:

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

Také si všimněte, že kolem znaménka rovnosti nejsou žádné mezery (variabilní přiřazení).

9
jasonwryan

expr je externí program používaný Bourne Shell (tj. sh). Bourne Shell původně neměl žádný mechanismus k provedení jednoduché aritmetiky. Využívá externí program expr pomocí backticku.

Backtick (`) se ve skutečnosti nazývá substituce příkazu. Substituce příkazů je mechanismus, kterým Shell provádí danou sadu příkazů a poté nahrazuje jejich výstup namísto příkazů.

sum=`expr $num1 + $num2`

V bash (bourne again Shell) má následující systax, nebude používat externí program expr.

sum=$((num1+num2))

pokud chceme použít externí program expr. máme následující systax:

sum=$(expr $num1 + $num2)
1
Premraj

Pokud používáte bash, můžete prostě udělat něco takového:

sum=$((num1+num2))
0
Hopping Bunny