Prosty skrypt - prośba o identyfiajcę błędu

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
arhetyp
Sędziwy Jeż
Sędziwy Jeż
Posty: 32
Rejestracja: 15 mar 2016, 06:46
Płeć: Mężczyzna

Prosty skrypt - prośba o identyfiajcę błędu

Post autor: arhetyp »

Witam,

jestem na początku mojej przygody z bashem i mam do napisania skrypt, który znajdzie w danej lokalizacji wszystkie pliki, które w swojej treści mają swoją nazwę.

Myślę, myślę i widziałbym to jak poniżej co do zasady.
Nie jestem jednak pewien ani tej konstrukcji ani użycia grep.

Kod: Zaznacz cały

#!/bin/bash
for P in $(ls); do
if [ -f "$P"]; then
X=`cat $P | grep $P`
if [ -n "$X"]; then
echo "Plik $P zawiera w swojej tresci nazwę";
fi
done
exit 0
efekt:

Kod: Zaznacz cały

syntax error near unexpected token 'done'
Będę bardzo wdzięczny za naprowadzenie na właściwe tory.

Pozdrawiam,
Arek
arhetyp
Sędziwy Jeż
Sędziwy Jeż
Posty: 32
Rejestracja: 15 mar 2016, 06:46
Płeć: Mężczyzna

Re: Prosty skrypt - prośba o identyfiajcę błędu

Post autor: arhetyp »

Już widzę w czym kłopot: w tym pierwszym if, które sprawdza czy plik jest regularny - nie wiem jak je wpleść w tą konstrukcję aby to zadziałało.
Bez tego warunku poniższy skrypt działa.

Proszę o pomoc.

Kod: Zaznacz cały

for PLIK in $(ls); do
X=$(cat $PLIK | grep $PLIK)
if [ -n "$X" ]; then
  echo " $PLIK zawiera nazwę"
else
  echo " $PLIK nie zawiera nazwy"
fi
done
Awatar użytkownika
enedil
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1352
Rejestracja: 08 wrz 2012, 16:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: i3
Architektura: x86_64
Kontakt:

Re: Prosty skrypt - prośba o identyfiajcę błędu

Post autor: enedil »

Musisz dwukrotnie dać 'fi', bo masz dwa 'if'y.
Dobrze jest, psiakrew, a kto powie, że nie, to go w mordę!

~moderatorzy
Awatar użytkownika
thalcave
Przyjaciel
Przyjaciel
Posty: 821
Rejestracja: 08 lis 2006, 12:17
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86

Re: Prosty skrypt - prośba o identyfiajcę błędu

Post autor: thalcave »

Kod: Zaznacz cały

#!/bin/bash

for P in $(ls); do
    if [[ -f "$P" ]]; then
        if grep -q $P $P; then
            echo "Plik $P zawiera w swojej tresci nazwę."
        fi
    fi
done
exit 0
Wywaliłem zmienną X, niepotrzebnego cata i dodałem brakującego fi, o którym enedil pisał.
Teraz jest optymalniej
GNU/Linux user
Na pytania na PW/e-mail nie udzielam odpowiedzi!
Szanujmy innych użytkowników!
Wesprzyj akcje: Temat rozwiązany -> dodajemy [solved]
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 30 gości