bash: se problema de condição

bash: se problema de condição

tentando fazer algumas operações em todos os arquivos do 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.

Responder1

A condição on ifestá malformada, você está apenas verificando se a string $file=*.cnão está vazia. Em vez disso, tente:

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

Por outro lado, o caractere de codificação '*' neste caso não é funcional, mas é interpretado como uma string.

Tentar:

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

Responder2

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, veja test(1).

No entanto, se você substituiu sua instrução for para ler

for file in *.c

a instrução for só seria passada para os arquivos que terminam com, .centão você não precisa mais verificar.

Responder3

Outra forma de revestimento seria o uso de find:

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

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

informação relacionada