Ich schreibe ein Shell-Skript, das über mein ./tests-Verzeichnis läuft und den Befehl unix diff verwendet, um .in und .out-Dateien für mein C-Programm miteinander zu vergleichen. Hier ist mein Shell-Skript:Wie gibt man "bestanden" aus, wenn ein Diff-Befehl keinen Unterschied in bash ergibt?
#! /usr/bin/env bash
count=0
# Loop through test files
for t in tests/*.in; do
echo '================================================================'
echo ' Test' $count
echo '================================================================'
echo 'Testing' $t '...'
# Output results to (test).res
(./snapshot < $t) > "${t%.*}.res"
# Test with diff against the (test).out files
diff "${t%.*}.res" "${t%.*}.out"
echo '================================================================'
echo ' Memcheck
echo '================================================================'
# Output results to (test).res
(valgrind ./snapshot < $t) > "${t%.*}.res"
count=$((count+1))
done
Meine Frage ist, wie kann ich eine if-Anweisung an das Skript hinzufügen, die Ausgabe ‚bestanden‘, wenn der Befehl diff ergibt keinen Unterschied? z.B.
Pseudocode:
if ((diff res_file out_file) == '') {
echo 'Passed'
} else {
printf "Failed\n\n"
diff res_file out_file
}
Ich habe irgendwo gelesen, for Schleifen sollten nicht verwendet werden, um durch Dateien in einem Verzeichnis zu iterieren. aber ich kann mich nicht erinnern, wo. – sjsam
Wissen Sie, warum oder was wäre das geeignete Werkzeug, um stattdessen zu verwenden? – joshuatvernon
Der Artikel, den ich gelesen habe, schlug eine "while" -Schleife vor. Aber Sie können diese Kommentare vernachlässigen, es sei denn, jemand bestätigt es, oder ich kann die Quelle finden – sjsam