查天气的脚本

这一版使用新浪的数据
[php]
[No.509 13:51:03 apache2 ]# cat /linux/xuexi/bash/myweather2.sh
#! /bin/bash

# * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 程序名:myweather.sh                                                                    #
# 功  能:通过 http://weather.sina.com.cn/查询天气                #
# 参  数: -d 删除; -n 更新天气,如果不用此参数                   #
#+       将使用旧的数据文件                                                      #
# 作  者:li-jiahuan@sohu.com                                                     #
# 日  期:05/12/14                                                                                #
# * * * * * * * * * * * * * * * * * * * * * * * * * * * *

dir=/tmp/weather
down=$dir/temp.html
data=$dir/temp.data
temp=$dir/temp.tmp
web="http://weather.sina.com.cn/images/figureWeather/map/wholeNation.html"
[[ ! -d $dir ]] && mkdir $dir

usage()
{
        echo
        echo Usage `basename $0` [-n] [-d] [city] [city ... ]
        echo Version: 0.1
        cat <<-CITY
        Valid City:
        上海    香港    兰州    北京    南京    南宁    南昌    哈尔滨
        合肥    长沙    台北    天津    太原    广州    成都    拉萨
        昆明    杭州    武汉    沈阳    济南    海口    澳门    石家庄
        福州    西宁    西安    贵阳    郑州    重庆    银川    长春
                            呼和浩特            乌鲁木齐
        CITY
        echo
        exit 0
}

# 从网上下载页面,并整理
getdata()
{
        wget -O $down $web > /dev/null 2>&1
        grep "城市" $down  |  sed 's/.*\(城市\)/\1/' | sed 's/.).*//g' | sed 's/ //g'  > $data
}

# 以城市名为参数查找
getweather()
{
        city=$1
        echo
        grep  "$city" $data | awk -F'<br>' 'BEGIN{OFS="\n"}{print $1,$2,$3,$4,$5}' | tee $temp
        if [[ ! -s $temp ]];then
                echo City "$city" not found.
        fi
        echo
}

# * * * * MAIN * * * * *

if [[ $# == 1 ]] && [[ $1 == -n ]];then
        getdata
        set "长春" "海口"
fi

# 如果没有参数,设置默认参数
[[ -z $1 ]] && set "长春" "海口"

# 如果没发现以前的数据文件,则下载
[[ ! -f $data ]] && getdata

[[ $1 == "-h" ]] || [[ $1 == "--help" ]] && usage

if [[ $1 == "-d" ]];then
        echo "Deleting $dir ..."
        rm -rf $dir
        echo -e "Done. \n"
        exit 0
fi

# 循环判断参数
while(( $# > 0));do
        if [[ $1 != "-n" ]];then
                getweather $1
                shift
        else
                getdata
                getweather $2
                shift 2
        fi
done

exit 0

[/php]