2016-10-29 3 views
0

Mein Problem ist, der folgende Code wieBash wenn Elif und sonst nicht, wie es

Fehler in meinem Linux-Skript sollte funktioniert
./sync.sh: Line 25: Syntaxerror at `then [translated to english] 

My-Code wirft, ist:

#!/bin/bash 

[...] 

if [["$input1" == 1 && "$input2" == 1]] 
    then 
     #local herunterladen 
     echo "Es wird nun local herunterladen" 
    elif[["$input1" == 1 && "$input2" == 2]] 
    then 
     #local hochladen 
     echo "Es wird nun local hochgeladen" 
    elif [["$input1" == 2 && "$input2" == 1]] 
    then 
     #online herunterladen 
     echo "Es wird nun online herunterladen" 
    elif[["$input2" == 2 && "$input2" == 2]] 
    then 
     #online hochladen 
     echo "Es wird nun online hochgeladen" 
    else 
     echo "${red}Du hast einmal nicht ${green}1${red} oder ${green}2${red} gedrückt!${reset}" 
fi 

My System ist Arch Linux mit Fish als Shell, aber ich denke, das ist egal.

+1

Führen Sie es durch [Shellcheck] (http://www.shellcheck.net/) –

Antwort

1

Sie benötigen Leerzeichen um [[ und ]].

Wenn Sie die Bash Handbuch lesen, werden Sie feststellen, dass [[ und ]] sind reservierte Wörter. Im Gegensatz zu Metazeichen wie ( und ), werden sie nicht erkannt, wenn sie direkt neben anderen gewöhnlichen Zeichen sind.

0

Auf Syntax der Bash-Bedingungen prüfen (z. B. http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-6.html). Bash benötigt Leerzeichen vor und nach [und]. Darüber hinaus - Dopplung von [und] ist unnötige

+0

Es ist, wenn Sie '&&' innerhalb der bedingten Ausdruck verwenden möchten. "[[...]]" ist anders (und in vieler Hinsicht besser) "[...]". – chepner

+0

Sowieso Leerzeichen vor und nach [[ist der Punkt hier – webcitron