Ein wenig unpoliert, aber es scheint zu funktionieren:
WP055="$(wget -qO - http://alerts.weather.gov/cap/wwaatmget.php?x=CAZ055&y=1)" remainder=$ if [ "$WP055" = "$remainder" ] then echo "No title found" exit fi while true do this_title=$ if [ "$remainder" = "$this_title" ] then echo "</title> not found" exit fi if [[ "$this_title" == *"by NWS"* ]] then echo "$this_title contains \"by NWS\"" # You probably want to do something here, like return. fi new_remainder=$ if [ "$new_remainder" = "$remainder" ] then echo "No more titles" exit fi remainder=$new_remainder done
remainder=$
ist eine Form der Parametererweiterung, die ein übereinstimmendes Präfixmuster entfernt. Hier setzt es remainder
an
- Der erste Titel in der Zeichenfolge ( ohne Einleitung
<title>
), - das Nachlaufen
</title>
und - der Rest der Zeichenfolge danach (einschließlich aller nachfolgenden Titel).
Wenn "$WP055" = "$remainder"
, bedeutet dies, dass die Shell <title>
die Zeichenfolge nicht gefunden hat.
this_title=$
Ähnlich setzt this_title
es $remainder
sich mit dem ersten zusammen, aber nicht mit dem ersten </title>
.
if [[ something1 == something2 ]]
führt mit den doppelten Klammern ( [[ … ]]
) und dem doppelten Gleichheitszeichen ( ==
) ein Muster aus. Alles andere ist Wiederholung.
Dies kann sich bei fehlerhafter Eingabe ungewöhnlich verhalten. dh Text, wo <title>
und </title>
nicht in alternierenden Paaren vorkommen.