diff options
author | Mattias Andrée <maandree@kth.se> | 2021-02-19 23:59:02 +0100 |
---|---|---|
committer | Mattias Andrée <maandree@kth.se> | 2021-02-19 23:59:02 +0100 |
commit | 9f52dd521b0d88fbfef7db14160caf6b9ecab972 (patch) | |
tree | 085cfe79ae2a2be7d99308edb9637ae3432b1077 | |
parent | Merge pull request #1 from kseistrup/https (diff) | |
download | metar-1.3.3.tar.gz metar-1.3.3.tar.bz2 metar-1.3.3.tar.xz |
Improve script: do not use cat or echo, and use tr instead of sed when possible1.3.3
Signed-off-by: Mattias Andrée <maandree@kth.se>
-rwxr-xr-x | metar | 48 |
1 files changed, 24 insertions, 24 deletions
@@ -7,51 +7,51 @@ metar_url () { url="https://tgftp.nws.noaa.gov/data/observations/metar/decoded" if test $# = 1; then - echo "${url}/$(echo "$1" | tr '[a-z]' '[A-Z]').TXT" + printf '%s\n' "${url}/$(printf '%s\n' "$1" | tr '[a-z]' '[A-Z]').TXT" else - echo "${url}/" + printf '%s\n' "${url}/" fi } usage () { - echo "usage: $0 ('get' | 'print' | 'set' station | 'list' [prefix] | 'closest' [latitude longitude] [list])" + printf '%s\n' "usage: $0 ('get' | 'print' | 'set' station | 'list' [prefix] | 'closest' [latitude longitude] [list])" >&2 } get_station () { icao="" if test -f ~/.config/metar; then - icao="$(cat ~/.config/metar | head -n 1)" + icao="$(head -n 1 < ~/.config/metar)" elif test -f /etc/metar; then - icao="$(cat /etc/metar | head -n 1)" + icao="$(head -n 1 < /etc/metar)" fi if test -z "$icao"; then - echo 'No METAR station has been selected.' >&2 + printf '%s\n' 'No METAR station has been selected.' >&2 exit 1 fi - echo "$icao" + printf '%s\n' "$icao" } get_location () { geo="" if test -f ~/.config/geolocation; then - geo="$(cat ~/.config/geolocation | head -n 1)" + geo="$(head -n 1 < ~/.config/geolocation)" geof=~/.config/geolocation elif test -f /etc/geolocation; then - geo="$(cat /etc/geolocation | head -n 1)" + geo="$(head -n 1 < /etc/geolocation)" geof=/etc/geolocation fi if test -z "$geo"; then - echo 'No location has been specificed or configured.' >&2 + printf '%s\n' 'No location has been specificed or configured.' >&2 exit 1 fi if ! test $(printf '%s\n' $geo | wc -l) = 2; then - echo "Invalid geolocation configuration (${geof})." >&2 + printf '%s\n' "Invalid geolocation configuration (${geof})." >&2 exit 1 fi - echo "$geo" + printf '%s\n' "$geo" } list_stations () @@ -65,7 +65,7 @@ list_stations () exit 1 fi list="$(sed -n 's/^.*<a href="\('"$1"'[A-Za-z0-9]*\)\.TXT">.*$/\1/p' "$file")" - unlink "$file" + unlink -- "$file" for icao in $list; do curl -s "$(metar_url "${icao}")" | head -n 1 done @@ -75,14 +75,14 @@ get_closest () { best= grep ')' | while read line; do - icao="$(echo "$line" | cut -d ')' -f 1 | cut -d '(' -f 2)" - location="$(echo "$line" | cut -d ')' -f 2 | cut -d ' ' -f 2,3)" - latitude="$(echo "$location" | cut -d ' ' -f 1)" - longitude="$(echo "$location" | cut -d ' ' -f 2)" - north="$(set +e; echo "$latitude" | grep 'S' > /dev/null; echo $?)" - east="$(set +e; echo "$longitude" | grep 'W' > /dev/null; echo $?)" - latitude="$(echo "$latitude" | tr -d NSEW | sed 's/-/ /g')" - longitude="$(echo "$longitude" | tr -d NSEW | sed 's/-/ /g')" + icao="$(printf '%s\n' "$line" | cut -d ')' -f 1 | cut -d '(' -f 2)" + location="$(printf '%s\n' "$line" | cut -d ')' -f 2 | cut -d ' ' -f 2,3)" + latitude="$(printf '%s\n' "$location" | cut -d ' ' -f 1)" + longitude="$(printf '%s\n' "$location" | cut -d ' ' -f 2)" + north="$(set +e; printf '%s\n' "$latitude" | grep 'S' > /dev/null; printf '%s\n' $?)" + east="$(set +e; printf '%s\n' "$longitude" | grep 'W' > /dev/null; printf '%s\n' $?)" + latitude="$(printf '%s\n' "$latitude" | tr -d NSEW | tr - ' ')" + longitude="$(printf '%s\n' "$longitude" | tr -d NSEW | tr - ' ')" best="$(python3 - $north "$latitude" $east "$longitude" "$1" "$2" "$icao" $best <<EOF import sys, math ploc = lambda ps : sum(float(p) / (60 ** i) for i, p in enumerate(ps)) @@ -107,7 +107,7 @@ else: print(sys.argv[8] + ' ' + sys.argv[9]) EOF )" - echo "$best" + printf '%s\n' "$best" done | tail -n 1 | cut -d ' ' -f 1 } @@ -116,11 +116,11 @@ if test $# = 1 && test "$1" = "get"; then elif test $# = 1 && test "$1" = "print"; then get_station elif test $# = 2 && test "$1" = "set"; then - echo "$2" | tr '[a-z]' '[A-Z]' > ~/.config/metar + printf '%s\n' "$2" | tr '[a-z]' '[A-Z]' > ~/.config/metar elif test $# = 1 && test "$1" = "list"; then list_stations "" elif test $# = 2 && test "$1" = "list"; then - list_stations "$(echo "$2" | tr '[a-z]' '[A-Z]')" + list_stations "$(printf '%s\n' "$2" | tr '[a-z]' '[A-Z]')" elif test $# = 1 && test "$1" = "closest"; then location="$(get_location)" list_stations "" | get_closest $location |