bash: se problema de condição

2

tentando fazer algumas operações em todos os arquivos no diretório que terminam em .c (arquivos C). O código é:

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

não funciona. apenas lista todos os arquivos e diretórios.

    
por susdu 04.11.2015 / 09:42

3 respostas

6

A condição em if está incorreta, você está apenas verificando se a string $file=*.c não está vazia. Tente em vez disso:

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

Por outro lado, o caracter comod '*' neste caso não é funcional, mas é interpretado como uma string.

Tente:

#!/bin/sh
clear
for file in *.c
do
    echo "$file"
done
exit 0
    
por 04.11.2015 / 09:56
4

Sua instrução de teste não verifica se o sufixo do arquivo é .c . Ele verifica (na maioria dos casos) se $file é igual a *.c , consulte test(1) .

No entanto, se você substituiu a declaração for por

for file in *.c

a declaração for só passaria pelos arquivos que terminam com .c , então você não precisa mais verificar.

    
por 04.11.2015 / 09:56
0

Outra forma de um liner seria o uso de find :

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

Depende do que você realmente quer fazer com esses arquivos para que isso ajude você.

    
por 04.11.2015 / 18:36

Tags