bash: si hay problema de condición

bash: si hay problema de condición

intentando realizar algunas operaciones en todos los archivos del directorio que terminan en .c (archivos C). El código es:

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

no funciona. simplemente enumera todos los archivos y directorios.

Respuesta1

La condición ifestá mal formada, solo estás verificando que la cadena $file=*.cno esté vacía. Pruebe en su lugar:

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

Por otro lado, el carácter comoding '*' en este caso no es funcional, pero se interpreta como una cadena.

Intentar:

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

Respuesta2

Su declaración de prueba no verifica si el sufijo del archivo es .c. Comprueba (en la mayoría de los casos) si $filees igual a *.c, consulte test(1).

Sin embargo, si reemplazó su declaración for para que diga

for file in *.c

la declaración for solo se pasará a los archivos que terminan en, .cpor lo que no tendrá que verificar más.

Respuesta3

Otra forma de una sola línea sería el uso de find:

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

Depende de lo que realmente quieras hacer con esos archivos para que esto te ayude.

información relacionada