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 if
ist falsch, Sie prüfen nur, ob die Zeichenfolge $file=*.c
nicht 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 $file
gleich 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, .c
so 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.