2017-10-28 3 views
0

ich diesen Pseudo-Code in eine Datei anhängen bin versucht:Bash - Wie Wort, wenn dann Aussage

if [ `expr $MOD % 5` -eq 0 ]; then. 

ich tat es auf Shell als:

echo if [ `expr $MOD % 5` -eq 0 ]; then 

Aber es gibt mir eine Syntaxfehler in der Nähe des unerwarteten Tokens 'then'. Ich kann nicht herausfinden, wo ich falsch liege.

+2

Er. Entfernen Sie das Echo? – melpomene

+0

entfernen Sie dann in der Echozeile, um zu sehen, was es druckt –

+1

Im Allgemeinen verwenden Sie '$ (...)' anstelle von backquotes, und verwenden '$ (($ MOD% 5))' anstelle des 'expr'-Befehls. 'echo 'wenn [$ (($ MOD% 5)) -eq 0]; dann ". – chepner

Antwort

2

Benutzen Sie:

$ echo 'if [ `expr $MOD % 5` -eq 0 ]; then' 
if [ `expr $MOD % 5` -eq 0 ]; then 
0

Wenn ich das richtig lese, versuchen Sie das eigentliche Text in eine Datei anhängen?

if [ `expr $MOD % 5` -eq 0 ]; then 

Dann ist das Problem Ihre Befehlsstruktur. Sie haben dies verwendet:

echo if [ `expr $MOD % 5` -eq 0 ]; then 

Dies ist eigentlich zwei Befehle, soweit die Shell betrifft, aufgrund der Semikolon. So ist es das gleiche wie:

echo if [ `expr $MOD % 5` -eq 0 ] 
then 

Da then ist normalerweise nicht ein gültiger Befehl, und das ist außerhalb des Kontexts einer Schale bedingt (zB if), wird die Schale nicht wissen, was damit zu tun .

Was Sie tun müssen, ist das ganze Ding als String zitieren und übergeben , dass Echo.

echo 'if [ `expr $MOD % 5` -eq 0 ]; then' 

Mit Apostroph (') als doppelte Anführungszeichen (") ist wichtig. Wenn Sie double quote verwenden, wird das Bit in Backticks (expr $MOD % 5) ausgewertet und nicht wie bisher an die Datei übergeben.