📜  命令行天气 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:23:00.406000             🧑  作者: Mango

命令行天气 - Shell-Bash

如果你是一名程序员,你可能对天气不太关心,但是,有时候你需要知道天气状况以便决定你是否应该出门或穿什么衣服。这时候,命令行天气就非常的有用了。命令行天气是一个基于Shell-Bash的小工具,它能够在命令行中显示天气情况,让你更方便快捷地获取天气信息。

如何使用命令行天气

使用命令行天气非常简单,你只需在终端输入以下命令即可:

$ curl wttr.in/

然后,你就能看到当地的天气状况了。

功能和特点

命令行天气有以下几个功能和特点:

  • 显示准确的未来三天气象数据
  • 支持多个查询地点,包括城市和国家
  • 可以自定义输出格式和语言
  • 能够显示天气图标和实时天气状况
  • 支持在终端中以彩色、黑白或无样式方式显示
输入参数

命令行天气支持以下输入参数:

  • -h 或 --help:帮助文档
  • -v 或 --version:版本信息
  • -q 或 --quiet:静音模式,只输出天气状况而不显示附加信息
  • -o 或 --output:自定义输出格式,支持 json、text、png、html 等格式
  • -m 或 --moon:显示月相信息
  • -l 或 --lang:自定义输出语言,支持多语言
  • -c 或 --city:自定义查询城市,默认根据IP地址查询
  • -f 或 --forecast:显示未来七天的天气状况
输出格式

命令行天气支持以下输出格式:

  • png格式:显示当地天气图标的png文件
  • json格式:以json格式输出天气状况信息
  • text格式:以文本格式输出天气状况信息
  • html格式:以html格式输出天气状况信息
代码实现

以下是一个简单的Shell-Bash实现,你可以根据自己的需求进行修改和定制:

#!/bin/bash

# 根据IP地址查询当地城市
IP=$(curl -s https://ipinfo.io/ip)
CITY=$(curl -s https://ipinfo.io/city)

if [ $# -eq 1 ]; then
    case $1 in
        -h|--help )
            echo "Usage: weather [OPTIONS]"
            echo "  -h, --help           Show this help message and exit"
            echo "  -v, --version        Show version information and exit"
            echo "  -q, --quiet          Quiet mode, only output the weather condition"
            echo "  -o, --output FORMAT  Customize output format, supported formats: json, text, png, html"
            echo "  -m, --moon           Show the moon phase information"
            echo "  -l, --lang LANG      Customize output language"
            echo "  -c, --city CITY      Customize query city, default query by IP address"
            echo "  -f, --forecast       Show the weather condition for the next seven days"
            exit 0
            ;;
        -v|--version )
            echo "Weather 1.0.0"
            exit 0
            ;;
        -q|--quiet )
            curl -s http://wttr.in/$CITY?format=%C,%t
            exit 0
            ;;
        -o|--output )
            if [ -z "$2" ]; then
                echo "Error: No output format specified."
                exit 1
            fi
            case $2 in
                json )
                    curl -s https://wttr.in/$CITY?format="%C,%t,%h,%p,%w,%m" | awk -v FS="," -v OFS="\n" '{split($6,a," ");print ("{\n\tcondition: \""$1"\",\n\ttemperature: \""$2"\",\n\thumidity: \""$3"\",\n\tpressure: \""$4"\",\n\twind: \""$5"\",\n\tmoon: \""a[2]"\",\n}")}'
                    exit 0
                    ;;
                text )
                    curl -s wttr.in/$CITY?format="%C %t, %h, %p, %w"
                    exit 0
                    ;;
                png )
                    curl -s wttr.in/$CITY.png
                    exit 0
                    ;;
                html )
                    curl -s wttr.in/$CITY?format="%C<br>%t<br>%h<br>%p<br>%w" | awk '{print "<html>\n<body>\n<pre>\n" $0 "\n</pre>\n</body>\n</html>"}'
                    exit 0
                    ;;
                * )
                    echo "Error: Unsupported output format $2."
                    exit 1
                    ;;
            esac
            ;;
        -m|--moon )
            MOON=$(curl -s wttr.in/$CITY?format="%m")
            echo "Moon phase: $MOON"
            exit 0
            ;;
        -l|--lang )
            if [ -z "$2" ]; then
                echo "Error: No language specified."
                exit 1
            fi
            LANG=$2
            curl -s wttr.in/$CITY?lang=$LANG
            exit 0
            ;;
        -c|--city )
            if [ -z "$2" ]; then
                echo "Error: No city specified."
                exit 1
            fi
            CITY=$2
            curl -s wttr.in/$CITY
            exit 0
            ;;
        -f|--forecast )
            curl -s wttr.in/$CITY?format="%F"
            exit 0
            ;;
        * )
            echo "Error: Unsupported option $1."
            exit 1
            ;;
    esac
else
    curl -s wttr.in/$CITY
    exit 0
fi
总结

命令行天气是一个非常好用的小工具,它可以让你更方便快捷地获取当地的天气信息,而不需要使用复杂的GUI程序。通过命令行天气,你可以快速准确地了解当地的天气状况,以便做出更加明智的决策。