Ich möchte so etwas auf der Kommandozeile meiner UNIX-Variante machen
%Vor% Ich möchte keine separate Skript-Textseite schreiben, nur um das zu überprüfen.
Dieses obige Ding zeigt einen Syntaxfehler.
Aber es muss einen glatten Weg geben, um dies zu umgehen?
Wie geht das?
Normalerweise erhalten Sie diese Ausgabe von Shasum
%Vor% Was mein Befehl ist, nimmt das erste Feld und vergleicht es mit
Deine Zeichenfolge. Wenn die Zeichenfolgen übereinstimmen, gibt awk "Good to go" aus.
Versuchen Sie etwas wie:
%Vor% Der Operator test
ist in [ .. ]
eingeschlossen und die richtige Syntax ist if; then; fi
, aber Sie können ihn mit den Operatoren &&
und ||
simulieren.
Ich habe ein Bash-Skript gemacht, das einen davon abhält, ständig darüber nachdenken zu müssen:
Überprüfen Sie es:
verify_checksum file.tgz [SHA1, SHA256, MD5 checksum]
... oder Sie können Argumente austauschen, weil Sie wieder vergessen haben, ob die Datei zuerst oder zuletzt kommt:
verify_checksum [SHA1, SHA256, MD5 checksum] file.tgz
... oder Sie können die verschiedenen Prüfsummen einer Datei berechnen (listet sie alle auf):
verify_checksum file.tgz
... oder Sie können zwei Dateien vergleichen:
verify_checkusm file1.tgz file2.tgz
Verwenden Sie etwas wie
%Vor% Erklärung: sha256sum
liefert sowohl die Prüfsumme als auch den Dateinamen, getrennt durch Leerzeichen. Wir können cut
es nur die Prüfsumme liefern.
Benutze shasum, um den Hash zu erhalten, schreibe dann test <copy-1> = <copy-2> && echo a || echo b
, du wirst a
sehen, wenn die Hashs identisch sind, sonst b
.
Wenn Sie faul sind, können Sie den || echo b
-Teil ablegen, Sie sehen a
, wenn der Hash der gleiche ist, sonst nichts. Und wenn Sie noch fauler sind, können Sie sogar kein Echo schreiben und sich auf die Anwesenheit oder Abwesenheit von command not found
message verlassen.
Ich benutze den Exit-Code des vorherigen / letzten Befehls:
Wenn die Prüfsumme gültig ist, ist der Beendigungscode des zuletzt ausgeführten Befehls 0
:
Wenn die Prüfsumme nicht korrekt ist, ist der Exit-Code anders als 0
:
Und hier ist das ganze Beispiel mit einer if
Anweisung:
Tags und Links command-line bash