Bash-problem z liczenie i zapisywanie do pliku

0

Witam otóż mam do zrobienia takie o to zadanie:

Napisać w bash'u skrypt, który w bieżącym katalogu policzy pliki o rozszerzeniu .html. Program ma wyświetlić na konsoli policzone pliki. Ponadto program ma utworzyć plik o nazwie plik3 w którym mają się znaleźć nazwy plików z rozszerzeniem html.

A tutaj co zrobiłem:

#!/bin/bash
for x in *.html
do
$x>> plik3
k=$[$k + 1]
done
echo "W bierzacym katalogu jest $k plikow"

I mam 2 problemy:
Po 1 to nie zapisuje mi tych nazw do tego plik3
Po 2 jak w katalogu nie mam żadnego pliku z rozszerzeniem .html czyli jest ich 0 to nie wyświetla liczby 0, a jeśli są to działa dobrze.

Czy ktoś wie, bo szukałem tyle i nie mogę znaleźć odpowiedzi. Dzięki

1

Po 1: echo $x >> plik3
Po 2: dodaj linię k=0 przed for...

0

Ok teraz zapisywanie do pliku działa dzięki ci.
A z tym k=0 próbowałem lecz tutaj chodzi coś z tą pętlą

*.html

Ponieważ to mi zapisuje do pliku też. nie wie może coś ze sprawdzaniem

$(ls *.html) 

Tylko błąd z tym wyskakuje, że nie ma takiego pliku itp

Hm dodałem if'a do petli zeby sprawdzal czy istnieje

for x in *.html
do
if [ -e *.html ]
then
# nie wazne tutaj xd
fi
done

I jak jest wiecej niz 1 plik to blad ze oczekiwano operatora dwuargumentowego

1

Racja, ale if tu nie pomoże. Nowa wersja, po moich przeróbkach, teraz chyba działa jak chciałeś:

#!/bin/bash

k=0

for x in $(/bin/ls *.html 2> /dev/null)
do
    echo "$x" >> plik3
    k=$[$k + 1]
done

echo "W bierzacym katalogu jest $k plikow"
0

Dzięki wielkie działa.

0

Dość słabe to Twoje rozwiązanie z pętlą, bo się wysypie jak będziesz miał pliki zawierajace spacje. Lepsze rozwiązanie:

find . -depth 1 -iname \*.html -print0 | awk -vRS='\0' '{ print $0 > "plik3"; c += 1 } END { print "W tym bierzącym katalogu jest" c "plików *.html" }'

Polecenie find jest wymagane, bo inaczej mogą być problemy jeśli w danym katalogu znajdują się wpisy zawierające przejście do nowej linii (standard UNIKSa na to zezwala, jedyny znak niemogący wystąpić w poprawnej ścieżce to NUL).

1 użytkowników online, w tym zalogowanych: 0, gości: 1