23 Agosto 2018

Utili utility Bash

Categorie: ,

Una raccolta di utili utility Bash e funzioni per rendere lo scripting bash più facile e divertente

Se ti piace utilizzare script bash per automatizzare alcune operazioni nel tup pc, troverai sicuramente interessante l'idea di poter evitare di riscrivere più volte lo stesso codice racchiudendo alcune funzioni bash comuni all'interno di un file utils.sh per poi includerlo nei tuoi scripts ed ottenere un facile accesso a una serie di utility tra cui:

  • Impostazione dell'output di testo colorato e in stile
  • Esecuzione di semplici conferme Si/No
  • Verifica se sono installati pacchetti, app, ecc
  • Invio di notifiche pushover

Come usare queste utilità

Ho un singolo file chiamato utils.sh nel quale inserisco tutte le mie funzioni di scripting bash. Tengo questo file in /usr/local/bin/ e lo richiamo nei miei scripts in un modo semplice, come scrivere una singola riga nella parte superiore di qualsiasi script bash.

infatti per includere le funzioni nello script basta aggiungere la stringa source /usr/local/bin/utils.sh in questo modo:

#!/bin/bash
source /usr/local/bin/utils.sh
(il resto dello script qui)

Impostazione dell’output di testo colorato

L'output di testo di stile nel terminale è importante per uno script utilizzabile. Queste utilità consentono ai messaggi di trasmettere significato attraverso il colore e l'iconografia.

le funzioni per l'output formattato con colori e iconografia:

#
# Set Colors
#
bold=$(tput bold)
underline=$(tput sgr 0 1)
reset=$(tput sgr0)
purple=$(tput setaf 171)
red=$(tput setaf 1)
green=$(tput setaf 76)
tan=$(tput setaf 3)
blue=$(tput setaf 38)

#
# Headers and Logging
#
e_header() { printf "\n${bold}${purple}========== %s ==========${reset}\n" "$@" }
e_arrow() { printf "➜ $@\n"
}
e_success() { printf "${green}✔ %s${reset}\n" "$@"
}
e_error() { printf "${red}✖ %s${reset}\n" "$@"
}
e_warning() { printf "${tan}➜ %s${reset}\n" "$@"
}
e_underline() { printf "${underline}${bold}%s${reset}\n" "$@"
}
e_bold() { printf "${bold}%s${reset}\n" "$@"
}
e_note() { printf "${underline}${bold}${blue}Note:${reset} ${blue}%s${reset}\n" "$@"
}

uno script di esempio:

#!/bin/bash

source /usr/local/bin/utils.sh

e_header "Sono un semplice script"
e_success "Sono un messaggio di Successo"
e_error "Sono un messaggio di Errore"
e_warning "Io sono un messaggio di Avvertimento"
e_underline "Sono un messaggio di testo sottolineato"
e_bold "Sono un testo in grassetto"
e_note "e io sono una Nota"

questo il risultato.

Conferme degli utenti

Molti script bash chiedono l'input dell'utente prima di eseguire un'attività. Molto spesso queste sono semplici domande si/no. Ad esempio, supponiamo di avere uno script che offre di caricare qualsiasi directory sul desktop su un sito FTP. Potresti volere che lo script ti chieda se vuoi caricare ogni cartella trovata. Ecco alcune scorciatoie su come farlo.

la funzione presente nel nostro file utils.sh

seek_confirmation() {
    printf "\n${bold}$@${reset}"
    read -p " (y/n) " -n 1
    printf "\n"
}

# Test whether the result of an 'ask' is a confirmation
is_confirmed() {
    if [[ "$REPLY" =~ ^[Yy]$ ]]; then
        return 0
    fi
        return 1
}

un esempio di script:

#!/bin/bash

source /usr/local/bin/utils.sh

e_header "Sono uno script di esempio"

seek_confirmation "Vuoi stampare un messaggio di successo?"
if is_confirmed; then
    e_success "Ecco un messaggio di successo"
else
    e_error "Non hai chiesto un messaggio di successo"
fi

questo il risultato.

Verifica se sono installati pacchetti

In molti scenari, si desidera eseguire solo una particolare sezione di uno script se è installato un determinato pacchetto o applicazione. Ad esempio, non eseguire uno script che richiede Git se Git non è installato. Oppure, non eseguire uno script che richiede un programma Mac se sei su Linux. 

Ecco una semplice scorciatoia per verificare la presenza di pacchetti, app e compatibilità del sistema operativo installati.

Le funzioni per effettuare le verifiche:

type_exists() {
    if [ $(type -P $1) ]; then
        return 0
    fi
        return 1
}

is_os() {
    if [[ "${OSTYPE}" == $1* ]]; then
        return 0
    fi
        return 1
}

un esempio di script:

#!/bin/bash

source /usr/local/bin/utils.sh

e_header "Sono uno script di esempio"

# Check for Git
if type_exists 'git'; then
  e_success "Il pacchetto git è già installato nel sistema"
else
  e_error "Git dovrebbe essere installato ma non lo è, interrompo lo script."
  exit 1
fi

if is_os "darwin"; then
  e_success "Sei su un mac"
else
  e_error "Non sei su un mac"
  exit 1
fi

questo il risultato.

Inviare notifiche ai tuoi dispositivi mobili

Questa funzione ti consente di inviare notifiche ai tuoi dispositivi mobili utilizzando il fantastico servizio gratuito di Pushover. Questo è molto utile se gli script eseguono comandi lunghi o se funzionano tramite Cron.

pushover () {
    PUSHOVERURL="https://api.pushover.net/1/messages.json"
    API_KEY="your-api-here"
    USER_KEY="your-user-key-here"
    DEVICE=""
    
    TITLE="${1}"
    MESSAGE="${2}"
    
    curl \
    -F "token=${API_KEY}" \
    -F "user=${USER_KEY}" \
    -F "device=${DEVICE}" \
    -F "title=${TITLE}" \
    -F "message=${MESSAGE}" \
    "${PUSHOVERURL}" > /dev/null 2>&1
}

un esempio di script:

#!/bin/bash

source /usr/local/bin/utils.sh

pushover "We just finished performing a lengthy task."

questo il risultato.

Per provare le funzioni del file utils.sh nei tuoi scripts, ricordati di assegnare i permessi di esecuzione al file con il comando:

chmod +x utils.sh

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

shopping-cart linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram