script mit fehlern

Antworten
Nachricht
Autor
Nathan009

script mit fehlern

#1 Beitrag von Nathan009 » 11. Mai 2010 9:10

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: Alles auswählen

#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: Alles auswählen

 | 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: Alles auswählen

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

Benutzeravatar
Janka
Beiträge: 3581
Registriert: 11. Feb 2006 19:10

#2 Beitrag von Janka » 11. Mai 2010 10:25

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: Alles auswählen

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
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Antworten