Ich schreibe ein Bash-Skript, das zwei Verzeichnisse vergleicht, bin mir aber nicht sicher, wie ich die Bedingungen überprüfen soll
Wenn der Benutzer beispielsweise 1 Argument statt 2 eingibt (wir benötigen 2, da wir zwei Verzeichnisse vergleichen), sollte ein Fehler auftreten. Wenn beide Argumente gültig sind, vergleichen Sie die Verzeichnisse und geben Sie sie in eine Datei aus.
Antwort1
Argumente verarbeiten
Die Verarbeitung von Argumenten, die über die Befehlszeile eines Skripts übergeben werden, ist so einfach wie folgt. Angenommen, wir hätten dieses Skript:
$ cat cmd.bash
#!/bin/bash
echo "arg1: $1"
echo "arg2: $2"
Führen Sie es jetzt ohne Argumente aus:
$ ./cmd.bash
arg1:
arg2:
Mit 1 Argument:
$ ./cmd.bash hi
arg1: hi
arg2:
Mit 2 Argumenten:
$ ./cmd.bash hi bye
arg1: hi
arg2: bye
Überprüfung der Argumente
Sie können dann prüfen, ob die Argumente 1 und 2 gültige Verzeichnisse sind oder nicht, und dann nach Bedarf abbrechen oder fortfahren. Wir führen also zwei Prüfungen ein, um zu sehen, ob die beiden Argumente Verzeichnisse sind oder nicht. Wenn nicht, beenden Sie das Programm.
$ cat cmd.bash
#!/bin/bash
[ -d "$1" ] || exit
[ -d "$2" ] || exit
[ $# == 2 ] || exit
echo "arg1: $1"
echo "arg2: $2"
Beispiel
Angenommen, wir haben diese Verzeichnisse.
$ mkdir d1 d2
$ ls -l
total 12
-rwxrwxr-x. 1 saml saml 89 Oct 14 23:13 cmd.bash
drwxrwxr-x. 2 saml saml 4096 Oct 14 23:14 d1
drwxrwxr-x. 2 saml saml 4096 Oct 14 23:14 d2
Wenn uns etwas anderes als zwei Verzeichnisse angegeben werden, wird das Skript einfach beendet.
$ ./cmd.bash hi bye
Wenn uns 2 Verzeichnisse gegeben sind:
$ ./cmd.bash d1 d2
arg1: d1
arg2: d2
Wenn uns mehr als 2 Argumente gegeben werden:
$ ./cmd.bash d1 d2 d3
Den Vergleich der beiden Verzeichnisse überlasse ich Ihnen. Wenn Sie Bash lernen möchten, verweise ich Sie auf den unten stehenden Link zu einem kostenlosen Online-Buch zu Bash.
Verweise
Antwort2
Die Anzahl der Argumente liegt imParameter$#
.
if [ $# -ne 2 ]; then
echo 1>&2 "Usage: $0 DIRECTORY1 DIRECTORY2"
exit 3
fi
Wenn Sie erzwingen möchten, dass die Argumente beide Verzeichnisse sind (und nicht andere Dateitypen), testen Sie sie mit-d
.
Das Dienstprogrammdiff
vergleicht zwei Dateien. Mit der Option -r
vergleicht es Verzeichnisse rekursiv.
diff -ru -- "$1" "$2"