bash: if-Bedingungsproblem

bash: if-Bedingungsproblem

Versuche, einige Operationen an allen Dateien im Verzeichnis durchzuführen, die mit .c enden (C-Dateien). Der Code lautet:

#!/bin/sh
clear
for file in *
do
    if [ $file="*.c" ]
    then
        echo $file
    fi
done
exit 0

funktioniert nicht. Es listet nur alle Dateien und Verzeichnisse auf.

Antwort1

Die Bedingung ifist falsch, Sie prüfen nur, ob die Zeichenfolge $file=*.cnicht leer ist. Versuchen Sie stattdessen:

#!/bin/sh
clear
for file in *
do
    if [ "$file" = "*.c" ]
    then
        echo "$file"
    fi
done
exit 0

Andererseits ist das Komedonenzeichen „*“ in diesem Fall nicht funktionsfähig, wird aber als Zeichenfolge interpretiert.

Versuchen:

#!/bin/sh
clear
for file in *.c
do
    echo "$file"
done
exit 0

Antwort2

Ihre Testanweisung prüft nicht, ob das Suffix der Datei ist .c. Sie prüft (in den meisten Fällen), ob $filegleich ist *.c, siehe test(1).

Wenn Sie jedoch Ihre for-Anweisung durch

for file in *.c

Der For-Anweisung würden nur die Dateien mit der Endung übergeben, .cso dass Sie nichts weiter prüfen müssen.

Antwort3

Eine andere einzeilige Möglichkeit wäre die Verwendung von find:

find . -name "*.c" | xargs echo

Dies hängt davon ab, was Sie eigentlich mit diesen Dateien tun möchten, damit es Ihnen hilft.

verwandte Informationen