Ich möchte ein Shell-Skript erstellen, das etwas wiedergibt, wenn 3 Verzeichnisse nicht vorhanden sind.
Hier ist der Code, den ich geschrieben habe: test.sh:
if [ ! -d "/home/unix/POSTagger2" ] || [! -d "/home/unix/POSTagger2/stanford-parser-full-2015-12-09"] || [! -d "/home/unix/POSTagger2/stanford-corenlp-full-2015-12-09"]; then
echo "Nope"
fi
Wenn ich es ausführe, erhalte ich folgende Fehlermeldung:
./test.sh: line 1: [!: command not found
Was ist falsch an meiner Syntax?
shell-script
shell
scripting
Henley Chiu
quelle
quelle
[
ist kein Token, sondern ein Befehl (ein anderer Name für den Befehltest
), der durch Leerzeichen getrennt werden muss. Ein ähnlicher Fall ist]
ein Befehlsparameter, der ebenfalls durch ein Leerzeichen getrennt werden muss.Antworten:
Ihnen fehlen einige Leerzeichen, zum Beispiel
[!
muss[ !
und"]
muss" ]
auf den korrigierten Code geachtet werden:Ein anderer Weg für Ihren Code:
quelle
Sie benötigen ein Leerzeichen zwischen
[
und, damit die!
Dinge richtig funktionieren. Dies liegt daran, dass[
es als Shell-eingebauter Befehl implementiert ist (es war sogar eine separate ausführbare Datei/usr/bin/[
).Sie können auch verwenden:
Bash bietet eine Alternative
[[
, die als en expression implementiert ist.[[
Anwendungen&&
,||
etc. statt-a
,-o
da die Betreiber.Bearbeiten: Dank der Kommentare von @LucianoAndressMartini und @pabouk für wichtige Korrekturen meines Verständnisses.
quelle
[
seit 1999 anscheinend nie überarbeitet .[[
ist kein Befehl. Es ist ein Token und einige Sonderzeichen haben eine andere Bedeutung zwischen[[
und]]
. Außerdem ist es nicht POSIX-konform und funktioniert nur in einigen Shells wie Bash oder Korn. Siehe zum Beispiel mywiki.wooledge.org/BashFAQ/031