Ich muss ein Shell-Skript erstellen, das auf das Vorhandensein einer Datei prüft. Wenn es nicht vorhanden ist, wird die Datei erstellt und der nächste Befehl oder nur der nächste Befehl ausgeführt. Was ich habe, macht das nicht.
#!/bin/bash
# Check for the file that gets created when the script successfully finishes.
if [! -f /Scripts/file.txt]
then
: # Do nothing. Go to the next step?
else
mkdir /Scripts # file.txt will come at the end of the script
fi
# Next command (macOS preference setting)
defaults write ...
Rückkehr ist
line 5: [!: command not found
mkdir: /Scripts: File exists
Keine Ahnung was zu tun ist. Jeder Ort, den ich bei einer Google-Suche finde, weist auf etwas anderes hin.
bash
shell-script
osx
jrw
quelle
quelle
touch
die Datei und die Bedingung überspringen?[
und!
), aber es ist wahrscheinlich hilfreich, hier darauf hinzuweisen, dass[
es sich um einen tatsächlichen Befehl unter Unix handelt. Ein Unix-Befehl erfordert ein Leerzeichen zwischen dem Befehlsnamen und seinen Argumenten. Ja, es ist auch eine Bash- Version , aber/usr/bin/[
auf den meisten Systemen gibt es auch eine Binärdatei .Antworten:
Möglicherweise einfachere Lösung, keine expliziten Tests erforderlich, verwenden Sie einfach:
Wenn Sie die „Änderung“ Zeit eines nicht wollen bestehende
file.txt
durch geändert werdentouch
, können Sie verwenden ,touch -a /Scripts/file.txt
umtouch
nur den „Zugang“ zu ändern und „change“ Zeiten.quelle
>>/Scripts/file.txt
. Dadurch wird die Datei zum Anhängen geöffnet und erstellt, falls sie nicht vorhanden ist.Sie erhalten den Fehler, weil kein Leerzeichen dazwischen steht
[
und!
es auch einige Fehler in Ihrem Code gibt. Zuerst prüfen Sie, ob die Datei nicht vorhanden ist, und wenn nicht, tun Sie nichts. Wenn die Datei vorhanden ist, erstellen Sie ein Verzeichnis (tun jedoch nichts, um die Datei zu erstellen).Sie brauchen auch nicht die Null-Operation, Sie sollten in der Lage sein, einfach zu tun:
Wenn
/Scripts/file.txt
dies nicht der Fall ist, wird zuerst das/Scripts
Verzeichnis und dann diefile.txt
Datei erstellt. Sie können das Vorhandensein des Verzeichnisses auch separat prüfen, wenn Sie dies wünschen. Außerdem bemerke ich bin mit-e
statt ,-f
wie Sie einfach für die Existenz einer Datei zu überprüfen gefragt , die was-e
wo tut-f
überprüft, ob es sich um eine „reguläre Datei“ http://tldp.org/LDP/abs/html/fto. htmlquelle
Zunächst ist das Shell-Skript kein Bash-Skript . Machen wir den Code also allgemeiner:
Jedes Posix-System muss diese Datei haben. Bash ist streng optional.
Es ist nicht nötig zu testen, ob das Verzeichnis existiert
So erstellen Sie die Datei, wenn sie nicht vorhanden ist:
Oder wenn Sie es vorziehen,
quelle
Sie haben einen syntaktischen Fehler. Sie benötigen Leerzeichen vor und nach dem
[
und]
.quelle
Das oben Gesagte geht davon aus, dass es keine "Tricks" wie das Erstellen eines eines Verzeichnisses genannt
/Scripts/file.txt
(das könnte ein Weg , um das Skript sein, immer zu zwingen , die , wenn Zweig eingeben). Wenn die "Datei" ein Verzeichnis ist, schlägt der -f-Test fehl und der Touch-Befehl ändert nichts.quelle
mein Ansatz
Ausgabe
.
quelle
touch
undmkdir -p