#!/bin/bash # #Author : Amirreza Firoozi #Author : Carsten Brueggenolte #name : wttr #Update 1.30: change config dir to $HOME/.config/wttr to go in line with other configuration files #Update 1.30: changed default city filename to 'default-city.txt' #Update 1.40: add v2.wttr.in feature and did some clean up #Update 1.41: add spaces in between city and url #Update 1.42: reverse changes with the space between url and city #Update 1.50: add v3.wttr.in - thanks to dok-ock for the inspiration and the fixes #Update 1.51: update about section and add it to the help screen #Update 1.52: move help and about into their own variables for better maintanance #Update 1.53: add a parameters '-t' current forecast and '-n' current weather #Update 1.54: spell check and added some optional parameters for -help, -today, -now wttr_ver="1.54_2021-09-03" #define script version GITHUB_REPO_URL="https://github.com/cblte/bash-script-wttr" URL="https://wttr.in/" URLv2="https://v2.wttr.in/" URLv3="https://v3.wttr.in/" About() { echo -e =" About the ██╗ ██╗████████╗████████╗██████╗ ██╗███╗ ██╗ ██║ ██║╚══██╔══╝╚══██╔══╝██╔══██╗ ██║████╗ ██║ ██║ █╗ ██║ ██║ ██║ ██████╔╝ ██║██╔██╗ ██║ ██║███╗██║ ██║ ██║ ██╔══██╗ ██║██║╚██╗██║ ╚███╔███╔╝ ██║ ██║ ██║ ██║██╗██║██║ ╚████║ ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝╚═╝ ╚═══╝ script by Carsten Brueggenolte This is a simple bash script to check weather condition with the help of wttr.in. The script 'wttr' is under GPL3 License. Source is available on Github: $GITHUB_REPO_URL Big THANK YOU goes to - 'Amirreza Firoozi' (https://github.com/AmirrezaFiroozi/wttr) for creating the initial script - 'doc-ock' (https://github.com/doc-ock/) for the idea to add version 3 of wttr.in and some other useful parameters. " } Help() { echo -e " Write 'wttr {your+city+name}' to check the weather condition of your city. Surround city name with single- or double-quotes if city name contains more than one word. You can also put a '+' (plus-sign) in beetween words when you do not want to surround with quotes. Examples: wttr cologne wttr \"Den Haag, Netherland\" wttr Den+Haag wttr \"Den Haag Street, South Africa\" wttr New+York You can type 'wttr' only if you have defined a standard city. Parameters: -a show some information about this script -h for some help (this page) -hh for the official wttr.in/:help page -i to install curl which is necessary for script to run correctly -m for photo of moon -n show current weather only -rm to remove the script :( -sdef to define a city as your default city -t show today's forecast -v show script version -v2 to fetch different weather report view for the standard city -v2 {your city name} to fetch different weather report view for city mentioned -v3 {your city name} to fetch an in-terminal graphic for the given region. Hint: When using '-v3' you do not need to add the '.sxl' to the end of the region/city name. The script will add it automatically. Any bugs? Any suggestions? Contact information at https://cbrueggenolte.de/impressum " } # ------------------------ # ----- Script starts here # ------------------------ # Check if a standard city has been set if [ -f "$HOME/.config/wttr/default-city.txt" ];then #check if user set default city or not . if user did load it to variable def cd $HOME/.config/wttr def=$(cat default-city.txt) elif [ ! -d $HOME/.config/wttr ];then #if he/she didn`t make a blank file mkdir "$HOME/.config/wttr" 2>/dev/null cd $HOME/.config/wttr echo "" > default-city.txt def="" fi # Print out some help if no arguments provided and no standard city been set if [ "$#" == "0" ] && [ "$def" == "" ];then echo -e "You have not entered any parameters and no standard city set yet.\nNeed help? try 'wttr -h'" elif [ "$#" -gt "2" ];then echo -e "too many parameters. \nNeed help? try 'wttr -h'" else case $1 in # currently doesn't work: upgrade. There is some permissions problem # "-u" | "-upgrade") # echo -e "Checking for upgrades..." # git clone $GITHUB_REPO_URL /tmp/wttr # bash /tmp/wttr/installer.sh # ;; "-a") # about About ;; "-h" | "-help") #showing help Help ;; "-hh") curl https://wttr.in/:help ;; "-i") sudo apt install curl ;; "-m") curl http://wttr.in/moon ;; "-n" | "-now") echo -e "Fetching current weather" if [ "$#" == "2" ];then city="$2" city=${city// /+} city=${city//[^a-zA-Z0-9+]} curl $URL"$city?0n" else curl $URL"$def?0n" fi cd $HOME ;; "-rm") read -p "Do you really want to remove wttr? (y/n)" response if [ "$response" == "y" ];then cd /usr/bin sudo rm -R "wttr" 2>/dev/null if [ -d "$HOME/.config/wttr" ];then sudo rm -d "$HOME/.config/wttr" 2>/dev/null fi echo -e "Script has deleted :(" else echo -e "Opration canceled" fi ;; "-sdef") # set the default city if [ ! -d $HOME/.config/wttr ];then cd $HOME mkdir -p ".config/wttr" 2>/dev/null fi if [ "$#" == "2" ];then cd $HOME/.config/wttr echo "$2" > default-city.txt echo -e "" echo -e "Done. Set '$2' as your default city. You can check its weather condition by typing only 'wttr' now :)" else read -p "Enter your city name to set as the default city (example : cologne) : " def # replacing spaces with + signes and removing non wanted chars def=${def// /+} def=${def//[^a-zA-Z0-9+]} if [ "$def" == "" ] && [ "$#" -ne "2" ];then echo "you did NOT enter anything ..." else cd $HOME/.config/wttr echo $def > default-city.txt echo -e "" echo -e "Done. Set '$def' as your default city. You can check its weather condition by typing only 'wttr' now :)" fi fi #end of the second if ;; "-t" | "-today") echo -e "Fetching today's forecast" if [ "$#" == "2" ];then city="$2" city=${city// /+} city=${city//[^a-zA-Z0-9+]} curl $URL"$city?1n" else curl $URL"$def?1n" fi cd $HOME ;; "-v") echo -e "wttr_VERSION is: "$wttr_ver" " ;; "-v2") echo -e "Fetching v2 of wttr.in" if [ "$#" == "2" ];then city="$2" city=${city// /+} city=${city//[^a-zA-Z0-9+]} curl $URLv2"$city" else curl $URLv2"$def" fi cd $HOME ;; "-v3") echo -e "Fetching v3 of wttr.in" if [ "$#" == "2" ];then city="$2" city=${city// /+} city=${city//[^a-zA-Z0-9+]} curl $URLv3"$city".sxl else curl $URLv3"$def".sxl fi cd $HOME ;; "") cd $HOME curl $URL"$def" ;; *) city=$1 city=${city// /+} city=${city//[^a-zA-Z0-9+]} curl $URL"$city" ;; esac fi