пытаюсь выполнить некоторые операции со всеми файлами в каталоге, которые заканчиваются на .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
Это зависит от того, что вы на самом деле хотите сделать с этими файлами, поэтому этот способ может вам помочь.