2016-05-18 5 views
1

Das Programm arbeitet im Fall fein "+", "-", "/"Produkt zweier Eingangsgröße in der Schale

Beispiel:

./calculate.sh 1 + 2 ==> output is 3. 

Aber das Problem hier ist, wenn ich schreibe:

Ich habe versucht "\*" wie folgt, aber es scheint, die Variable $ 2 kann nicht bekommen, was ich will.

Jeder kann mir helfen, was ist das Problem hier?

#!/bin/sh 
if [ $# -ne 3 ] 
then 
     echo "Please input a number , an operator + or - or * or /" 
else 
     case "$2" in 
      "+") echo "Sum is `expr $1 + $3`";; 
      "-") echo "Substraction is `expr $1 - $3`";; 
      "*") echo "Product is `expr $1 \* $3`";; 
      "/") echo "Division is `expr $1/$3`";; 
     esac 
fi 
+0

Es funktioniert sicherlich mit './calculate.sh 1 '*' 2 '. Bitte geben Sie Details über ** genau ** an, welches Fehlverhalten Sie beim Zitieren des Arguments sehen; Ansonsten ist dies CNR (kann nicht reproduziert werden). –

+0

das sagte, 'expr' ist uralt - das moderne POSIX sh Weg, Mathe zu tun ist' $ (($ 1 * $ 3)) ', die viel effizienter ist (beinhaltet nicht Abzweigung einer Subshell). –

+0

(als eine andere Seite - verwenden Sie keine '.sh' Erweiterung für ein ausführbares Skript; ausführbare Skripte definieren Befehle und Befehle haben keine Erweiterungen - Sie führen' ls', nicht 'ls.elf'. Erweiterungen eignen sich für Shell-Bibliotheken, die als Quelle dienen sollen, nicht für Skripte, die ausgeführt werden sollen, siehe auch https://www.talisman.org/~erlkonig/documents/commandname-extensions-consided-harmful/). –

Antwort

0

Sie sollten es verwenden, wie dies

./calculate.sh 2 \* 3 

Oder

./calculate.sh 2 "*" 3 

Oder

./calculate.sh 2 '*' 3 

Sie verwenden "\ *", die falsch ist.

+0

Die OP behauptet, dass sie sie mit "*" (genau äquivalent zu "\ *" für unsere Zwecke) verwenden und es immer noch nicht funktioniert. Siehe vierten Absatz der Frage. –

+0

@CharlesDuffy Ja. Lies einfach noch einmal. Alles funktioniert für mich in ksh, zsh und bash, – khrm

+0

@CharlesDuffy Er sagte, er versuchte '' \ * "'. Wenn er Anführungszeichen und Backslash verwendet, wird es nicht funktionieren - es sollte nur das eine oder das andere sein. – Barmar