Compare commits
13 Commits
v0.9
...
11bad4f0cd
| Author | SHA1 | Date | |
|---|---|---|---|
| 11bad4f0cd | |||
| ddb25adba3 | |||
| 54532c7f23 | |||
| 9debf8e7f9 | |||
| 9166fe0e8b | |||
| bdb26651b1 | |||
| 9e9a58ff9f | |||
| 1e25f72eff | |||
| c4de3d61bb | |||
| 391e4c1267 | |||
| 84568c355f | |||
| 8264db80e9 | |||
| 6ecabb9ffa |
Binary file not shown.
2080
Oiseaux_europe.csv
2080
Oiseaux_europe.csv
File diff suppressed because it is too large
Load Diff
36
README.md
Normal file
36
README.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# bashbird
|
||||||
|
|
||||||
|
Script that queries a SQLite database about a bird and returns various information (vernacular name, English name, family, order and links to [oiseaux.net](https://oiseaux.net)).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### 1) bashbirds.sh
|
||||||
|
|
||||||
|
<u>Usage</u>:
|
||||||
|
|
||||||
|
./bashbird.sh -b etourneau
|
||||||
|
|
||||||
|
<u>Others files</u>:
|
||||||
|
|
||||||
|
- Oiseaux europe.xlsm: export from Oiseaux.net website
|
||||||
|
- Oiseaux europe.csv:same as format .csv
|
||||||
|
- insert.sh: script to create birds.db database from .csv export (Usage: ./insert.sh)
|
||||||
|
- birds.db: SQLite database
|
||||||
|
- liste_oiseaux.html: html export
|
||||||
|
- liste_oiseaux.md: markdown export
|
||||||
|
- Transparent300px.png: usefull for markdown export (table width)
|
||||||
|
|
||||||
|
<u>Options</u>:
|
||||||
|
|
||||||
|
- -b \< bird \>: a bird to search (-b etourneau)
|
||||||
|
- -b all: search for all birds
|
||||||
|
- -m: export markdown
|
||||||
|
- -w: export html
|
||||||
|
- -h: help
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
- insert.sh deletes and recreates the database each time it is launched (no update)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BIN
Transparent300px.png
Normal file
BIN
Transparent300px.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 100 B |
171
bashbirds.sh
171
bashbirds.sh
@@ -1,6 +1,42 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
VERSION="v0.9"
|
VERSION="v1.1.4"
|
||||||
|
|
||||||
|
### Variables for self updating
|
||||||
|
ScriptArgs=( "$@" )
|
||||||
|
ScriptPath="$(readlink -f "$0")" # /Users/bruno/Documents/Scripts/bashbirds/bashbirds.sh
|
||||||
|
ScriptWorkDir="$(dirname "$ScriptPath")" # /Users/bruno/Documents/Scripts/bashbirds
|
||||||
|
|
||||||
|
dotenv () {
|
||||||
|
set -a
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
[ -f "$ScriptWorkDir/.env" ] && . "$ScriptWorkDir/.env" || echo -e "${red}\nNo .env file found ! Could'nt get update from Github.'.${reset}"
|
||||||
|
set +a
|
||||||
|
}
|
||||||
|
|
||||||
|
dotenv
|
||||||
|
|
||||||
|
### ChangeNotes: 1.1.4 curl 2ko
|
||||||
|
### ChangeNotes: 1.1.3 Won't display Changes notes
|
||||||
|
### ChangeNotes: 1.1.1 Bugfix .env path
|
||||||
|
### ChangeNotes: 1.1 Bugfix when script was run with symlink
|
||||||
|
### ChangeNotes: 1.0 Minor corrections.
|
||||||
|
|
||||||
|
Github="https://github.com/bruno21/bashbirds"
|
||||||
|
# Public Repo:
|
||||||
|
#RawUrl="https://raw.githubusercontent.com/Bruno21/bashbirds/main/bashbirds.sh"
|
||||||
|
# Private Repo:
|
||||||
|
RawUrl="https://x-access-token:$GITHUB_TOKEN@raw.githubusercontent.com/Bruno21/bashbirds/main/bashbirds.sh"
|
||||||
|
|
||||||
|
### Check if there's a new release of the script:
|
||||||
|
LatestRelease="$(curl -s -r 0-50 $RawUrl | sed -n "/VERSION/s/VERSION=//p" | tr -d '"')"
|
||||||
|
#LatestChanges="$(curl -s -r 0-2000 $RawUrl | sed -n "/ChangeNotes/s/# ChangeNotes: //p")"
|
||||||
|
LatestChanges="$(curl -s -r 0-2000 $RawUrl | grep "^### ChangeNotes:" | sed 's/### ChangeNotes://g')"
|
||||||
|
|
||||||
|
#[[ $LatestRelease != $VERSION ]] && new="($LatestRelease)" || new=""
|
||||||
|
|
||||||
|
#echo "$LatestRelease"
|
||||||
|
#echo "$LatestChanges"
|
||||||
|
|
||||||
red="\033[1;31m"
|
red="\033[1;31m"
|
||||||
greenbold="\033[1;32m"
|
greenbold="\033[1;32m"
|
||||||
@@ -8,38 +44,28 @@ green="\033[0;32m"
|
|||||||
yellow="\033[0;33m"
|
yellow="\033[0;33m"
|
||||||
yellowbold="\033[1;33m"
|
yellowbold="\033[1;33m"
|
||||||
bold="\033[1m"
|
bold="\033[1m"
|
||||||
|
italic="\033[3m"
|
||||||
#bold_under="\033[1;4m"
|
#bold_under="\033[1;4m"
|
||||||
underline="\033[4m"
|
underline="\033[4m"
|
||||||
reset="\033[0m"
|
reset="\033[0m"
|
||||||
|
|
||||||
dotenv () {
|
|
||||||
set -a
|
|
||||||
# shellcheck disable=SC1091
|
|
||||||
[ -f ".env" ] && . ".env" || echo -e "${red}\nNo .env file found ! No token for gotify.${reset}"
|
|
||||||
set +a
|
|
||||||
}
|
|
||||||
|
|
||||||
dotenv
|
|
||||||
|
|
||||||
### ChangeNotes: .
|
|
||||||
Github="https://github.com/bruno21/bashbirds"
|
|
||||||
# Repo normal:
|
|
||||||
#RawUrl="https://raw.githubusercontent.com/Bruno21/bashbirds/main/bashbirds.sh"
|
|
||||||
# Repo privé:
|
|
||||||
RawUrl="https://x-access-token:$GITHUB_TOKEN@raw.githubusercontent.com/Bruno21/bashbirds/main/bashbirds.sh"
|
|
||||||
|
|
||||||
### Variables for self updating
|
|
||||||
ScriptArgs=( "$@" )
|
|
||||||
ScriptPath="$(readlink -f "$0")" # /Users/bruno/Documents/Scripts/bashbirds/bashbirds.sh
|
|
||||||
ScriptWorkDir="$(dirname "$ScriptPath")" # /Users/bruno/Documents/Scripts/bashbirds
|
|
||||||
|
|
||||||
### Check if there's a new release of the script:
|
|
||||||
LatestRelease="$(curl -s -r 0-50 $RawUrl | sed -n "/VERSION/s/VERSION=//p" | tr -d '"')"
|
|
||||||
LatestChanges="$(curl -s -r 0-200 $RawUrl | sed -n "/ChangeNotes/s/### ChangeNotes: //p")"
|
|
||||||
echo $LatestRelease
|
|
||||||
echo -e "${yellowbold}Bashbird${reset} $VERSION\n"
|
echo -e "${yellowbold}Bashbird${reset} $VERSION\n"
|
||||||
|
|
||||||
|
|
||||||
|
### Help Function:
|
||||||
|
Help() {
|
||||||
|
echo "Syntax: birds.sh [OPTION]"
|
||||||
|
echo "Example: birds.sh -b buse"
|
||||||
|
echo
|
||||||
|
echo "Options:"
|
||||||
|
echo "-b -b <bird>, -b all."
|
||||||
|
echo "-h Print this Help."
|
||||||
|
echo "-m Export markdown."
|
||||||
|
echo "-v Prints current version."
|
||||||
|
echo "-w Export html."
|
||||||
|
}
|
||||||
|
|
||||||
req2() {
|
req2() {
|
||||||
option=$1
|
option=$1
|
||||||
|
|
||||||
@@ -55,8 +81,9 @@ req2() {
|
|||||||
|
|
||||||
#read -p "Pause: " choice
|
#read -p "Pause: " choice
|
||||||
|
|
||||||
query2="SELECT * FROM liste;"
|
|
||||||
result2=$(sqlite3 ./birds.db "$query2")
|
query2="SELECT Francais, Autres, Latin, Anglais, Ordre, Famille, Liens FROM liste;"
|
||||||
|
result2=$(sqlite3 "$ScriptWorkDir/birds.db" "$query2")
|
||||||
#echo "$result2"
|
#echo "$result2"
|
||||||
|
|
||||||
i=1
|
i=1
|
||||||
@@ -71,19 +98,34 @@ req2() {
|
|||||||
or="${array[4]}"
|
or="${array[4]}"
|
||||||
fa="${array[5]}"
|
fa="${array[5]}"
|
||||||
ln="${array[6]}"
|
ln="${array[6]}"
|
||||||
|
|
||||||
|
|
||||||
[[ $aut != "" ]] && z="($aut)" || z=""
|
[[ $aut != "" ]] && z="($aut)" || z=""
|
||||||
|
|
||||||
if [ $ext = ".md" ]; then
|
if [ $ext = ".md" ]; then
|
||||||
echo "| $fr $z |" >>"$f"
|
|
||||||
echo "|--------------------------------------------------|" >>"$f"
|
#echo "| $fr $z |" >>"$f"
|
||||||
echo "| $lat |" >> "$f"
|
#echo "|--------------------------------------------------|" >>"$f"
|
||||||
echo "| $en |" >> "$f"
|
#echo "| $lat |" >> "$f"
|
||||||
echo "| $or |" >> "$f"
|
#echo "| $en |" >> "$f"
|
||||||
echo "| $fa |" >> "$f"
|
#echo "| $or |" >> "$f"
|
||||||
echo "| $ln |" >> "$f"
|
#echo "| $fa |" >> "$f"
|
||||||
echo "" >> "$f"
|
#echo "| $ln |" >> "$f"
|
||||||
|
#echo "" >> "$f"
|
||||||
|
|
||||||
|
birds+="| $fr | $z |"'\n'
|
||||||
|
birds+="|------------------------ | --------------------------|"'\n'
|
||||||
|
birds+="| Vernaculaire | $lat |"'\n'
|
||||||
|
birds+="| Anglais | $en |"'\n'
|
||||||
|
birds+="| Ordre | $or |"'\n'
|
||||||
|
birds+="| Famille | $fa |"'\n'
|
||||||
|
#birds+="| Liens (oiseaux.net)<br /> | [$fr]($ln)<br /> |"'\n'
|
||||||
|
birds+="| Liens (oiseaux.net)<br /> | [$fr]($ln)<br /> |"'\n'
|
||||||
|
birds+='\n'
|
||||||
|
|
||||||
elif [ $ext = ".html" ]; then
|
elif [ $ext = ".html" ]; then
|
||||||
firstletter="${fr:0:1}"
|
|
||||||
|
firstletter="${fr:0:1}"
|
||||||
|
|
||||||
if [ $firstletter != $old_index ]; then
|
if [ $firstletter != $old_index ]; then
|
||||||
index+=("$firstletter")
|
index+=("$firstletter")
|
||||||
@@ -116,12 +158,20 @@ req2() {
|
|||||||
bird="$z"
|
bird="$z"
|
||||||
|
|
||||||
html
|
html
|
||||||
|
elif [ $ext = ".md" ]; then
|
||||||
|
|
||||||
|
echo -e "${yellow}Exporting markdown file ${italic}$ScriptWorkDir/liste_oiseaux$ext !${reset}"
|
||||||
|
bird=$(echo "$birds" | sed 's/\
|
||||||
|
//g')
|
||||||
echo -e "$bird" > "liste_oiseaux$ext"
|
echo -e "$bird" > "liste_oiseaux$ext"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
html() {
|
||||||
|
|
||||||
|
echo -e "${yellow}Exporting html file ${italic}$ScriptWorkDir/liste_oiseaux.html !${reset}"
|
||||||
|
|
||||||
cat > liste_oiseaux.html << EOF
|
cat > liste_oiseaux.html << EOF
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
@@ -222,8 +272,10 @@ req1() {
|
|||||||
if [[ "${request,,}" == "all" ]]; then
|
if [[ "${request,,}" == "all" ]]; then
|
||||||
request="";
|
request="";
|
||||||
fi
|
fi
|
||||||
query1="SELECT * FROM liste WHERE Francais LIKE \"%$request%\" OR Autres LIKE \"%$request%\" OR Latin LIKE \"%$request%\"";
|
|
||||||
result1=$(sqlite3 ./birds.db "$query1")
|
request=$(echo "$request" | sed 'y/áàâäçéèêëîïìôöóùúüñÂÀÄÇÉÈÊËÎÏÔÖÙÜÑ/aaaaceeeeiiiooouuunAAACEEEEIIOOUUN/')
|
||||||
|
|
||||||
|
query1="SELECT * FROM liste WHERE Fra LIKE \"%$request%\" OR Aut LIKE \"%$request%\" OR Latin LIKE \"%$request%\"";
|
||||||
result1=$(sqlite3 "$ScriptWorkDir/birds.db" "$query1")
|
result1=$(sqlite3 "$ScriptWorkDir/birds.db" "$query1")
|
||||||
|
|
||||||
if [ -n "$result1" ]; then
|
if [ -n "$result1" ]; then
|
||||||
@@ -232,12 +284,12 @@ req1() {
|
|||||||
cmpt=1
|
cmpt=1
|
||||||
while IFS='|' read -ra array2;
|
while IFS='|' read -ra array2;
|
||||||
do
|
do
|
||||||
aut2="${array2[1]}"
|
fr2="${array2[0]}"
|
||||||
lat2="${array2[2]}"
|
aut2="${array2[2]}"
|
||||||
en2="${array2[3]}"
|
lat2="${array2[4]}"
|
||||||
or2="${array2[4]}"
|
en2="${array2[5]}"
|
||||||
fa2="${array2[5]}"
|
or2="${array2[6]}"
|
||||||
lnk2="${array2[6]}"
|
fa2="${array2[7]}"
|
||||||
lnk2="${array2[8]}"
|
lnk2="${array2[8]}"
|
||||||
|
|
||||||
tag2="$fr2"
|
tag2="$fr2"
|
||||||
@@ -290,7 +342,7 @@ self_update_curl() {
|
|||||||
cp "$ScriptPath" "$ScriptPath".bak
|
cp "$ScriptPath" "$ScriptPath".bak
|
||||||
if [[ $(builtin type -P curl) ]]; then
|
if [[ $(builtin type -P curl) ]]; then
|
||||||
curl -L $RawUrl > "$ScriptPath" ; chmod +x "$ScriptPath"
|
curl -L $RawUrl > "$ScriptPath" ; chmod +x "$ScriptPath"
|
||||||
exec "$ScriptPath" "${ScriptArgs[@]}" # run the new script with old arguments
|
printf "\n%s\n" "--- starting over with the updated version ---"
|
||||||
exec "$ScriptPath" "${ScriptArgs[@]}" >/dev/null # run the new script with old arguments
|
exec "$ScriptPath" "${ScriptArgs[@]}" >/dev/null # run the new script with old arguments
|
||||||
exit 1 # exit the old instance
|
exit 1 # exit the old instance
|
||||||
elif [[ $(builtin type -P wget) ]]; then
|
elif [[ $(builtin type -P wget) ]]; then
|
||||||
@@ -319,31 +371,28 @@ self_update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
### Version check & initiate self update
|
### Version check & initiate self update
|
||||||
printf "New version available! %b%s%b ⇒ %b%s%b \n Change Notes: %s \n" "$c_yellow" "$VERSION" "$c_reset" "$c_green" "$LatestRelease" "$c_reset" "$LatestChanges"
|
if [[ "$VERSION" != "$LatestRelease" ]] ; then
|
||||||
printf "New version available! %b%s%b ⇒ %b%s%b \nChange Notes:\n%s \n" "$c_yellow" "$VERSION" "$c_reset" "$c_green" "$LatestRelease" "$c_reset" "$LatestChanges"
|
printf "New version available! %b%s%b ⇒ %b%s%b \nChange Notes:\n%s \n" "$c_yellow" "$VERSION" "$c_reset" "$c_green" "$LatestRelease" "$c_reset" "$LatestChanges"
|
||||||
if [[ -z "$AutoUp" ]] ; then
|
if [[ -z "$AutoUp" ]] ; then
|
||||||
read -r -p "Would you like to update? y/[n]: " SelfUpdate
|
read -r -p "Would you like to update? y/[n]: " SelfUpdate
|
||||||
[[ "$SelfUpdate" =~ [yY] ]] && self_update
|
[[ "$SelfUpdate" =~ [yY] ]] && self_update
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f ./birds.db ]; then
|
### Database is present or not ?
|
||||||
if [ ! -f "$ScriptWorkDir/birds.db" ]; then
|
if [ ! -f "$ScriptWorkDir/birds.db" ]; then
|
||||||
echo -e "${red}No database found !${reset}"
|
echo -e "${red}No database found !${reset}"
|
||||||
fi
|
|
||||||
exit 1
|
exit 1
|
||||||
### Help Function:
|
|
||||||
Help() {
|
else
|
||||||
echo "Syntax: birds.sh [OPTION]"
|
query="SELECT COUNT(Francais) FROM liste";
|
||||||
echo "Example: birds.sh -b buse"
|
result5=$(sqlite3 "$ScriptWorkDir/birds.db" "$query")
|
||||||
echo
|
|
||||||
echo "Options:"
|
if [ -n "$result5" ]; then
|
||||||
echo "-b -b <bird>, -b all."
|
echo -e "\n${bold}A birds database that return keywords for Lightroom.${reset}"
|
||||||
echo "-h Print this Help."
|
echo -e "$result5 birds founds in database...\n"
|
||||||
echo "-m Export markdown."
|
Help
|
||||||
echo "-v Prints current version."
|
fi
|
||||||
echo "-w Export html."
|
|
||||||
}
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
while getopts "b:hmw" options; do
|
while getopts "b:hmw" options; do
|
||||||
|
|||||||
22
insert.sh
22
insert.sh
@@ -13,8 +13,8 @@ reset="\033[0m"
|
|||||||
dir=$(dirname "$0") # /Users/bruno/Documents/Scripts/keywords2insta
|
dir=$(dirname "$0") # /Users/bruno/Documents/Scripts/keywords2insta
|
||||||
|
|
||||||
if [ ! -f ./birds.db ]; then
|
if [ ! -f ./birds.db ]; then
|
||||||
cmd0="CREATE TABLE liste (Francais string, Autres string, Latin string, Anglais string, Ordre string, Famille string, Liens string);"
|
cmd0="CREATE TABLE liste (Francais string, Fra string, Autres string, Aut string, Latin string, Anglais string, Ordre string, Famille string, Liens string);"
|
||||||
echo "$cmd0" | sqlite3 ./birds_plus.db
|
echo "$cmd0" | sqlite3 ./birds.db
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then exit 0; fi
|
if [ $? -ne 0 ]; then exit 0; fi
|
||||||
fi
|
fi
|
||||||
@@ -34,20 +34,24 @@ if [ -f "$dir"/Oiseaux_europe.csv ]; then
|
|||||||
((skip_headers--))
|
((skip_headers--))
|
||||||
else
|
else
|
||||||
fr="${array[0]}"
|
fr="${array[0]}"
|
||||||
aut="${array[1]}"
|
fr_wa="${array[1]}"
|
||||||
lat="${array[2]}"
|
aut="${array[2]}"
|
||||||
en="${array[3]}"
|
aut_wa="${array[3]}"
|
||||||
or="${array[4]}"
|
lat="${array[4]}"
|
||||||
fa="${array[5]}"
|
en="${array[5]}"
|
||||||
ln="${array[6]}"
|
or="${array[6]}"
|
||||||
|
fa="${array[7]}"
|
||||||
|
ln="${array[8]}"
|
||||||
|
|
||||||
fr=$(echo "$fr" | sed "s/'/''/g")
|
fr=$(echo "$fr" | sed "s/'/''/g")
|
||||||
|
fr_wa=$(echo "$fr_wa" | sed "s/'/''/g")
|
||||||
aut=$(echo "$aut" | sed "s/'/''/g")
|
aut=$(echo "$aut" | sed "s/'/''/g")
|
||||||
|
aut_wa=$(echo "$aut_wa" | sed "s/'/''/g")
|
||||||
en=$(echo "$en" | sed "s/'/''/g")
|
en=$(echo "$en" | sed "s/'/''/g")
|
||||||
or=$(echo "$or" | sed "s/'/''/g")
|
or=$(echo "$or" | sed "s/'/''/g")
|
||||||
fa=$(echo "$fa" | sed "s/'/''/g")
|
fa=$(echo "$fa" | sed "s/'/''/g")
|
||||||
|
|
||||||
cmd1="INSERT INTO liste (Francais, Autres, Latin, Anglais, Ordre, Famille, Liens) VALUES ('$fr','$aut','$lat','$en','$or','$fa','$ln');"
|
cmd1="INSERT INTO liste (Francais, Fra, Autres, Aut, Latin, Anglais, Ordre, Famille, Liens) VALUES ('$fr','$fr_wa','$aut','$aut_wa','$lat','$en','$or','$fa','$ln');"
|
||||||
echo "$cmd1" | sqlite3 ./birds.db
|
echo "$cmd1" | sqlite3 ./birds.db
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user