it-swarm.com.de

Wie kann ich eine Unterteilung mit Variablen in einer Linux-Shell durchführen?

Wenn ich Befehle in meiner Shell wie folgt ausführe, wird ein expr: non-integer argument-Fehler ausgegeben. Kann mir das bitte jemand erklären?

$ x=20
$ y=5
$ expr x / y 
expr: non-integer argument
99
Judking

Diese Variablen sind Shell-Variablen. Um sie als Parameter für ein anderes Programm ( dh expr) zu erweitern, müssen Sie das Präfix $ verwenden:

expr $x / $y

Der Grund, warum es sich beschwert hat, ist der, dass er dachte, Sie wollten mit alphabetischen Zeichen arbeiten ( dh nicht-ganzzahlig)

Wenn Sie die Bash-Shell verwenden, können Sie mit der Ausdruckssyntax dasselbe Ergebnis erzielen:

echo $((x / y))

Oder:

z=$((x / y))
echo $z
147
paddy

Ich glaube, es wurde bereits in anderen Threads erwähnt:

calc(){ awk "BEGIN { print "$*" }"; }

dann kannst du einfach folgendes eingeben:

calc 7.5/3.2
  2.34375

In Ihrem Fall wird es sein:

x=20; y=3;
calc $x/$y

wenn Sie möchten, fügen Sie dies als separates Skript hinzu und machen Sie es in $ PATH verfügbar, damit Sie es immer in Ihrer lokalen Shell haben:

#!/bin/bash
calc(){ awk "BEGIN { print $* }"; }
28
zielonys

Warum nicht lassen lassen; Ich finde es viel einfacher ... Hier ein Beispiel, das du nützlich finden kannst:

start=`date +%s`
# ... do something that takes a while ...
sleep 71

end=`date +%s`
let deltatime=end-start
let hours=deltatime/3600
let minutes=(deltatime/60)%60
let seconds=deltatime%60
printf "Time spent: %d:%02d:%02d\n" $hours $minutes $seconds
19
user1985657

Das Referenzieren von Bash-Variablen erfordert eine Parametererweiterung

Die Standard-Shell der meisten Linux-Distributionen ist Bash. In Bash müssen Variablen ein Dollarzeichen-Präfix für Parametererweiterung verwenden. Zum Beispiel:

x=20
y=5
expr $x / $y

Natürlich hat Bash auch arithmetische Operatoren und eine spezielle arithmetische Erweiterungssyntax , so dass die Binärdatei expr nicht als separater Prozess aufgerufen werden muss. Sie können die Shell die ganze Arbeit so machen lassen:

x=20; y=5
echo $((x / y))
15
Todd A. Jacobs

nehmen wir an

x=50
y=5

dann 

z=$((x/y))

das wird einwandfrei funktionieren, aber wenn Sie/operator in Anweisungen verwenden wollen, dann kann es nicht aufgelöst werden . enter code here Verwenden Sie in diesem Fall einfache Zeichenfolgen wie div oder devide oder etwas anderes . Siehe den Code 

0
Pooja Rajput