Немного неполированный, но, похоже, работает:
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=$
это форма раскрытия параметров, которая удаляет соответствующий шаблон префикса. Здесь он устанавливает remainder
для
- Первый заголовок в строке ( исключая вступительный
<title>
), - отставая
</title>
, и - все остальные строки после этого (включая все последующие заголовки).
Если "$WP055" = "$remainder"
, это означает, что оболочка не найдена <title>
в строке.
this_title=$
Аналогично устанавливается this_title
, что $remainder
до, но не включая первый </title>
.
if [[ something1 == something2 ]]
с двойными скобками ( [[ … ]]
) и двойным знаком равенства ( ==
) соответствует шаблону. Все остальное - повторение.
Это может вести себя странно при неправильном вводе; т.е. текст, где <title>
и </title>
не встречаются в чередующихся парах.