2016-05-07 15 views
2

Ich frage mich, wie ich mein Shell-Skript Schlaf für die Summe meiner Variablen machen kann, danke!Sleep-Befehl in SH mit Variablen

#!/bin/sh 
echo hello1 
a=6 
b=2 
c=3 
d = $a+$b+$c 
sleep $d 
echo hello2 

Antwort

1

Sie können mit $((...)) Arithmetik:

d=$(($a + $b + $c)) 
+0

Ich habe das versucht, aber ich bekomme Syntaxfehler? sleep.sh: Zeile 6: Unerwarteter EOF beim Suchen nach passendem ') ' sleep.sh: Zeile 9: Syntaxfehler: unerwartetes Ende der Datei – KG2005

+0

Ignoriere den letzten Kommentar^Dies ist der Fehler, den es mir gibt ") 3ntax error : ungültiger arithmetischer Operator (Fehler Token ist " – KG2005

+0

@ KW1: Versuchen Sie' #!/bin/sh' in '#!/bin/bash' zu ändern. –

1

Versuchen Sie dieses Skript:

#!/bin/bash 
echo "hello1"; 
a=6; 
b=2; 
c=3; 
d=$(($a+$b+$c)); 
sleep $d; 
echo "hello2"; 
3

Wie andere schon angedeutet haben, die moderne (*) Ansatz ist #!/bin/bash zu verwenden oder sogar mit ihrer integrierten Unterstützung von arithmetischen Operationen mit n=$(($a+$b+$c).

Wie Sie explizit #!/bin/sh erwähnt haben, hier ist eine Lösung, die für Sie arbeiten wird.

#!/bin/sh 
echo hello1 
a=6 
b=2 
c=3 
d=`echo "$a+$b+$c" | bc` 
sleep $d 
echo hello2 

Der Schlüsselteil einfachen Anführungszeichen für Befehls Substitution, und Senden der math Argumente unter Verwendung von dem bc Befehl ausgewertet werden, der Rohrschale unter Verwendung von (|) Funktionalität: ie

d=`echo "$a+$b+$c" | bc` 
| |  |  | | -> bc is a "basic" calulator 
| |  |  | -> pipes pass std-out from preceding cmd, to std in fo following cmd 
| |  | -> a string to be passed to `bc` for arthimetic evaluation 
| | -> echo writes its output to std-out 
| -> = assigns output of cmd=substition to var $d 

(*) moderne in Schalen bedeutet 1986 und später ;-)

IHTH

0

Sie können

verwenden
a=6 
    b=2 
    c=3 
    ((d=a+b+c))