Page 1 of 1

script mit fehlern

Posted: 11. May 2010 9:10
by Nathan009
ich bin nicht gut im scripte schreiben, noch am lernen
ich denke da sind mehr als ein Fehler drin
wie krieg ich die $user in die if schleife?

Code: Select all

#datei mit alle usernamen anlegen
ls /home/ > user

#username in speicher
cat user | while read user; do

#Prüfen, ob die da datei /home/$user/puplic_html/index.html existiert
if test -r /home/$user/puplic_html/index.html
then 
  echo $user > user-da 
  cat /home/$user/puplic_html/index.html | grep '<title>' > titel
fi

;done

#username in speicher
cat user-da | while read user; do
cat titel | while read titel; do
#usernamen einsetzen
echo '
<b>'$user'</b><br>
<a href="http&#58;//bf.mw.de/~'$user'">'$titel'</a>
<br>
';done

Code: Select all

 | grep '<title>'
erzeugt ja <title> Titel der jeweiligen Webseite </title>
wie kann ich die <title> entfernen

Das ergebnis soll html sein und so aussehen
HTML-Code:

Code: Select all

<b>Benutzername</b><br>
Titel&#58; <a href="Link_zur_Webseite'">Titel_der Webseite</a>
<br> 
und davon viele untereinander

Posted: 11. May 2010 10:25
by Janka
Erstmal solltest du die offensichtlichen Schreibfehler rausbauen z.b. puplic_html. Dann muss das ; vor dem "done" weg. ; brauchst du nur, wenn du mehrere Anweisungen auf einer Zeile hintereinanderweg schreiben willst. Die echo und die grep-Anweisung überschreiben den jeweils letzen Dateiinhalt, weil du > statt >> als Umleitung benutzt. So ist das sicher nicht gedacht. Das grep holt dir schließlich noch die ganze Zeile.

Schönheitsreperaturen: Das "do" kann auch auf eine eigene Zeile. Einrückungen Die Zwischendateien sind unnötig. cat ist ebenso unnötig. Der ganze zweite Teil ist unnötig.

Gegenvorschlag:

Code: Select all

ls /home | while read user
do 
  if &#91; -r /home/$user/public_html/index.html &#93;
  then 
    titel=$&#40;grep '<title>' </home/$user/public_html/index.html&#41;
    echo '
      <b>'$user'</b><br> 
      <a href="http&#58;//bf.mw.de/~'$user'">'$titel'</a> 
      <br>'
  fi
done 
Du willst aber sicher nur das, was zwischen den "<title>"-Tags steht in deiner Ausgabe haben. Das ist möglich, indem man zusätzlich "sed" bemüht. Allerdings ist das nicht wirklich übersichtlich. Du solltest überlegen, das gleich *alles* mit "awk' zu machen statt mit Shell+Grep+Sed. Der hat nämlich alles drin was du dafür brauchst und ist auch praktisch überall installiert.

Janka