bash: если условие проблемы

bash: если условие проблемы

пытаюсь выполнить некоторые операции со всеми файлами в каталоге, которые заканчиваются на .c (файлы C). Код такой:

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

не работает. просто выводит список всех файлов и каталогов.

решение1

Условие on ifнеправильно сформировано, вы просто проверяете, что строка $file=*.cне пустая. Попробуйте вместо этого:

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

С другой стороны, кодирующий символ '*' в данном случае не является функциональным, а интерпретируется как строка.

Пытаться:

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

решение2

Ваш тестовый оператор не проверяет, является ли суффикс файла .c. Он проверяет (в большинстве случаев), $fileравен ли *.c, см test(1). .

Однако, если вы заменили оператор for следующим образом:

for file in *.c

оператор for будет передавать только файлы, заканчивающиеся на , .cпоэтому вам больше не придется проверять.

решение3

Другим однострочным способом было бы использование find:

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

Это зависит от того, что вы на самом деле хотите сделать с этими файлами, поэтому этот способ может вам помочь.

Связанный контент