Sto imparando lo scripting Shell per un diploma in informatica che sto attualmente facendo. Sto cercando di scrivere un piccolo script che aggiunga due numeri come mostrato in uno dei tutorial che ci sono stati dati.

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

Tuttavia, quando gli do il autorizzazione di esecuzione ed esecuzione dello script, mi dà questo errore.

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

inserisci qui la descrizione dellimmagine

Ho provato a eseguirlo sia su Ubuntu che su Fedora ma si è verificato lo stesso errore. Qualcuno può dirmi cosa mi manca qui?

Commenti

Risposta

Per prima cosa devi eliminare gli spazi per il compito, ad esempio

sum="expr $num1 + $num2" 

quindi devi cambiare " in ` o anche meglio in $():

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

invece di utilizzare expr puoi anche eseguire il calcolo ulation direttamente nella tua shell:

sum=$((num1 + num2)) 

Commenti

  • Se la motivazione per usare expr invece di $((...)) è un desiderio di essere portabile con la classica Bourne Shell, quindi ' una buona idea per evitare anche $(...).
  • @AlanCurry ci sono shell che non supportano $()? Per quanto ne so è richiesto da posix, ad es. tutte le shell compatibili con posix dovrebbero supportare $()
  • @UlrichDangel La shell Bourne originale non ' aveva $(…), ma è quasi estinto (forse qualcuno da qualche parte sta ancora eseguendo /bin/sh su Solaris).
  • La shell C non funziona ” t supporta $(…) –– o almeno non tutte le versioni.
  • Qual è lo scopo delle virgolette doppie attorno alle variabili?

Risposta

Probabilmente hai letto male i backtick come virgolette singole nella riga:

sum = "expr $num1 + $num2"

Consulta la Wiki di Greg sullutilizzo di $(...).

Questo funziona come previsto:

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

Nota inoltre che non ci sono spazi vuoti intorno al segno di uguale (lassegnazione della variabile).

La risposta

expr è un programma esterno utilizzato da Bourne shell (ad es. sh). La Bourne Shell originariamente non aveva alcun meccanismo per eseguire semplici operazioni aritmetiche. Utilizza expr programma esterno con laiuto di backtick.

Il backtick ( `) è effettivamente chiamata sostituzione dei comandi. La sostituzione dei comandi è il meccanismo mediante il quale la shell esegue un determinato insieme di comandi e quindi sostituisce il loro output nel luogo dei comandi.

sum=`expr $num1 + $num2` 

In bash (bourne again shell) ha il seguente systax, non utilizzerà il programma esterno expr.

sum=$((num1+num2)) 

se vogliamo utilizzare il programma esterno expr. abbiamo il seguente systax:

sum=$(expr $num1 + $num2) 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *