Strona 1 z 1

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

: 09 kwie 2016, 22:52
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

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

: 10 kwie 2016, 13:35
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

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

: 10 kwie 2016, 17:49
autor: enedil
Musisz dwukrotnie dać 'fi', bo masz dwa 'if'y.

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

: 11 kwie 2016, 08:12
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