#!/usr/bin/env bash VERSION="v0.6b" 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 $VERSION red="\033[1;31m" greenbold="\033[1;32m" green="\033[0;32m" yellow="\033[0;33m" bold="\033[1m" #bold_under="\033[1;4m" underline="\033[4m" reset="\033[0m" req2() { f_md="liste_oiseaux.md" if [ -f "./$f_md" ]; then rm "./$f_md" fi read -p "Pause: " choice query2="SELECT * FROM liste;" result2=$(sqlite3 ./birds.db "$query2") #echo "$result2" array=() while IFS='|' read -ra array; do fr="${array[0]}" aut="${array[1]}" lat="${array[2]}" en="${array[3]}" or="${array[4]}" fa="${array[5]}" ln="${array[6]}" [[ $aut != "" ]] && z="($aut)" || z="" echo "| $fr $z |" >>"$f_md" echo "|--------------------------------------------------|" >>"$f_md" echo "| $lat |" >> "$f_md" echo "| $en |" >> "$f_md" echo "| $or |" >> "$f_md" echo "| $fa |" >> "$f_md" echo "| $ln |" >> "$f_md" echo "" >> "$f_md" done <<< "$result2" exit 0 } req1() { echo -e "${bold}Recherche: <$1>${reset}" request="$1" if [[ "${request,,}" == "all" ]]; then request=""; fi #query1="SELECT * FROM liste WHERE Francais LIKE \"%$1%\" OR Autres LIKE \"%$1%\" OR Latin LIKE \"%$1%\""; query1="SELECT * FROM liste WHERE Francais LIKE \"%$request%\" OR Autres LIKE \"%$request%\" OR Latin LIKE \"%$request%\""; result1=$(sqlite3 ./birds.db "$query1") if [ -n "$result1" ]; then array2=() keywords=() cmpt=1 while IFS='|' read -ra array2; do fr2="${array2[0]}" aut2="${array2[1]}" lat2="${array2[2]}" en2="${array2[3]}" or2="${array2[4]}" fa2="${array2[5]}" lnk2="${array2[6]}" tag2="$fr2" if [ -n "$aut2" ]; then tag2+=",$aut2" fi tag2+=",$lat2,$en2" if [ -n "$or2" ]; then tag2+=",$or2" fi if [ -n "$fa2" ]; then tag2+=",$fa2" fi #echo "${#fr2} ; ${#lat2} ; ${#en2} ; ${#or2} ; ${#fa2} ; ${#lnk2} ; ${#aut2} " echo printf "\e[1m| %-3s | %-25s | %-20s | %-20s | %-18s | %-15s | %-20s \e[0m\n" "$cmpt" "$fr2" "$lat2" "$en2" "$or2" "$fa2" "$aut2" printf "| %-3s | %-55s \n" "$cmpt" "$lnk2" printf "\e[0;34m| %-3s | %-55s \e[0m\n" "$cmpt" "$tag2" keywords+=("$tag2") cmpt=$((cmpt+1)) done <<< "$result1" choose=$(echo -e "\nChoose a number to get keywords in your clipboard ( to quit): ") read -e -p "$choose" choice re='^[0-9]+$' if [[ $choice == "q" ]] || [[ $choice == "Q" ]]; then exit 0 elif ! [[ $choice =~ $re ]] ; then echo -e "${red}Wrong index !${reset}" else if [ "$choice" -ge 1 ] && [ "$choice" -le "$((cmpt-1))" ]; then if [[ "$OSTYPE" == "linux-gnu" ]] && [ -x "$(command -v xsel)" ]; then xsel -b <<< "${keywords[$((choice-1))]}" elif [[ "$OSTYPE" == "darwin"* ]] && [ -x "$(command -v pbcopy)" ]; then pbcopy <<< "${keywords[$((choice-1))]}" fi else echo -e "${red}Wrong index !${reset}" fi fi else echo -e "\n ${red}No results found!" fi } self_update_curl() { cp "$ScriptPath" "$ScriptPath".bak if [[ $(builtin type -P curl) ]]; then curl -L $RawUrl > "$ScriptPath" ; chmod +x "$ScriptPath" printf "\n%s\n" "--- starting over with the updated version ---" exec "$ScriptPath" "${ScriptArgs[@]}" # run the new script with old arguments exit 1 # exit the old instance elif [[ $(builtin type -P wget) ]]; then wget $RawUrl -O "$ScriptPath" ; chmod +x "$ScriptPath" printf "\n%s\n" "--- starting over with the updated version ---" exec "$ScriptPath" "${ScriptArgs[@]}" # run the new script with old arguments exit 1 # exit the old instance else printf "curl/wget not available - download the update manually: %s \n" "$Github" fi } self_update() { cd "$ScriptWorkDir" || { printf "Path error, skipping update.\n" ; return ; } if [[ $(builtin type -P git) ]] && [[ "$(git ls-remote --get-url 2>/dev/null)" =~ .*"mag37/dockcheck".* ]] ; then printf "\n%s\n" "Pulling the latest version." git pull --force || { printf "Git error, manually pull/clone.\n" ; return ; } printf "\n%s\n" "--- starting over with the updated version ---" cd - || { printf "Path error.\n" ; return ; } exec "$ScriptPath" "${ScriptArgs[@]}" # run the new script with old arguments exit 1 # exit the old instance else cd - || { printf "Path error.\n" ; return ; } self_update_curl fi } ### Version check & initiate self update if [[ "$VERSION" != "$LatestRelease" ]] ; then 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 [[ -z "$AutoUp" ]] ; then read -r -p "Would you like to update? y/[n]: " SelfUpdate [[ "$SelfUpdate" =~ [yY] ]] && self_update fi fi if [ ! -f ./birds.db ]; then echo -e "${red}No database found !${reset}" exit 1 fi ### Help Function: Help() { echo "Syntax: birds.sh [OPTION]" echo "Example: birds.sh -b buse" echo echo "Options:" echo "-b -b , -b all." echo "-h Print this Help." echo "-m Export markdown." echo "-v Prints current version." echo "-w Export html." } while getopts "b:hm" options; do case "${options}" in # b) Bird="${OPTARG}" ;; b) req1 "${OPTARG}" ;; m) req2 ;; v) printf "%s\n" "$VERSION" ; exit 0 ;; h|*) Help ; exit 2 ;; esac done shift "$((OPTIND-1))"