Învăț scripturi Shell pentru o diplomă în IT pe care o fac în prezent. Încerc să scriu un mic script care să adauge două numere așa cum se arată într-unul din tutorialele care ni s-au dat.

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

Cu toate acestea, atunci când îi dau permisiunea de execuție și rulați scriptul, îmi dă această eroare.

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

introduceți descrierea imaginii aici

Am încercat să rulez atât pe Ubuntu cât și pe Fedora, dar apare aceeași eroare. Poate cineva să-mi spună ce îmi lipsește aici?

Comentarii

Răspuns

Mai întâi trebuie să scapi de spațiile pentru atribuire, de ex.

sum="expr $num1 + $num2" 

atunci trebuie să schimbați " într-un ` sau chiar mai bine în $():

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

în loc să utilizați expr puteți face și calc ulation direct în shell-ul dvs.:

sum=$((num1 + num2)) 

Comentarii

  • Dacă motivația pentru utilizarea expr în loc de $((...)) este o dorință de a fi portabil la shell-ul Bourne clasic, atunci ' este o idee bună pentru a evita și $(...).
  • @AlanCurry există cochilii care să nu suporte $()? Din câte știu, este cerut de posix, de ex. toate shell-urile compatibile cu posix ar trebui să accepte $()
  • @UlrichDangel Shell-ul Bourne original nu ' nu trebuie să aibă $(…), dar a dispărut (poate cineva undeva rulează încă /bin/sh pe Solaris).
  • C Shell nu nu acceptă $(…) –– sau cel puțin nu toate versiunile.
  • Care este scopul de a avea ghilimele duble în jurul variabilelor?

Răspuns

Probabil că ați citit greșit backticks-uri ca ghilimele unice în linia:

sum = "expr $num1 + $num2"

Consultați Wiki de Greg despre utilizarea $(...) în schimb.

funcționează conform așteptărilor:

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

De asemenea, rețineți că nu există lacune în jurul semnului egal (atribuirea variabilei).

Răspuns

expr este un program extern utilizat de Bourne shell (adică SH). Bourne shell nu avea inițial niciun mecanism pentru a efectua aritmetică simplă. Folosește programul extern expr cu ajutorul backtick.

Backtick ( `) se numește de fapt substituirea comenzilor. Înlocuirea comenzilor este mecanismul prin care shell-ul execută un set dat de comenzi și apoi le substituie ieșirea în locul comenzilor.

sum=`expr $num1 + $num2` 

În bash (Bourne din nou shell) are următoarea systax, nu va fi folosit programul extern expr.

sum=$((num1+num2)) 

dacă dorim să utilizăm programul extern expr. avem următorul sistem:

sum=$(expr $num1 + $num2) 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *