martedì 27 gennaio 2015

Quando un parametro speciale ti fa sentire meglio [bash]

Salve!

Come si dice, l'appetito vien mangiando. Vabbè, una cosa alla volta. Stasera, mentre scrivevo il mio "scriptino" quotidiano in bash, mi sono ritrovato di fronte ad una problematica apparentemente semplice. O forse era veramente semplice, ma sapete, sto invecchiando...

Comunque, immaginate di avere una variabile il cui valore sia costituito da tante stringhe, proprio come vi mostro nell'esempio sotto.

programmi="libreoffice vlc remmina liferea"

Bene, il discorso è questo, sto estrapolando da uno script lunghissimo, cerco di essere il più chiaro possibile, però.

In pratica voglio che lo script, ad un certo punto, controlli se nella variabile, di cui sopra, ci sia la stringa "libreoffice" e, solo se c'è, installi alcuni componenti aggiuntivi.

La domanda è la seguente: Come dobbiamo impostare il codice? Provate a dare una risposta senza leggere oltre.

Io ho fatto così:

programmi="libreoffice vlc remmina liferea"
echo "$programmi" | grep "libreoffice"
if [ $? -eq 0 ]; then
    apt-get install libreoffice-help-it libreoffice-l10n-it libreoffice-gtk -y
else
    echo "Niente da fare"
fi


La soluzione, in realtà, è veramente semplice, basta ricordarsi dell'esistenza del parametro speciale $?.

Cosa fa il $?

Restituisce lo stato dell’ultimo comando eseguito in foreground (primo piano).

Il risultato di $? può essere 0 o 1.

Restituisce 0 se è andato tutto bene, in caso contrario, restituisce 1.

Facciamo un esempio.

programmi="vlc remmina liferea"


Come potete vedere, ho eliminato la stringa "libreoffice" dalla variabile programmi. Il comando grep ovviamente non la trova e $? restituisce 1.



Se invece grep la trova, il $? restituisce 0, e dato che l'if confronta $? con lo 0, eseguirà il comando sperato.

Alla prossima!

mercoledì 14 gennaio 2015

Il Codice di Cesare [Brevi Esercizi]

Salve!

Uno degli esempi più significativi di crittografia a chiave simmetrica dell'età classica fu senza dubbio il cifrario di Cesare.

Come funziona codesto codice?

Si tratta di un cifrario a sostituzione monoalfabetica: Ogni lettera di una parola viene sostituita con un'altra in base ad una chiave.

Si dice che Cesare usasse come chiave K=3

Esempio:

Parola in chiaro: Luca
Parola cifrata: OAFD

Stabilito che la chiave è 3, la lettera L va sostituita con la lettera O, la lettera U con la lettera A, la lettera C va sostituita con la G e la lettera A con la lettera D.  Chiave 3 significa che bisogna contare tre posti in avanti nell'alfabeto (italiano, nell'esempio), a partire dalla lettera data, che va esclusa dal computo.

Ho creato uno script in bash, semplice semplice, che cifra e decifra in base al cifrario di Cesare. 

#!/bin/bash
#Cifrario di Cesare
#bit3lux@gmail.com

cifrare() {
#chiave=3
#Alfabeto di 26 lettere, senza spazi.
clear
alfabeto=$(echo {a..z} | sed 's/ //g')
k3="DEFGHIJKLMNOPQRSTUVWXYZABC"
read -p "digita il testo da cifrare: " testo
echo $testo | tr "[:upper:]" "[:lower:]" | tr "$alfabeto" "$k3"
}

decifrare() {
clear
alfabeto=$(echo {a..z} | sed 's/ //g') 
k3="DEFGHIJKLMNOPQRSTUVWXYZABC"
read -p "digita il testo da decifrare: " testo
echo $testo | tr "[:lower:]" "[:upper:]" | tr "$k3" "$alfabeto"
}

clear
echo "Per cifrare digita 0, per decifrare digita 1."
echo
read scelta

if [ $scelta == 0 ]
then
    cifrare
    echo

elif [ $scelta == 1 ]
then
    decifrare
    echo

else
    clear && echo "Opzione non valida, per scegliere digita 0 o 1"
    echo

fi

exit 0

Cifrare
Decifrare
Alla prossima!

martedì 6 gennaio 2015

Pillole di OpenSource #2

Salve!

  • Lo sviluppo di Lubit 4 - 64 bit sta richiedendo più tempo di quello preventivato, ragion per cui il rilascio sarà posticipato almeno di due settimane. Inizialmente si pensava fosse pronta per il 9 gennaio, vabbè...
  • Una interessantissima recensione di OpenSuse, nota distro GNU/Linux, la trovate sul blog di Marco Giannini. L'articolo è stato scritto da Enrico, e a me è piaciuto molto (il post, intendo). E che ben vengano le distro sponsorizzate da grosse aziende!!! Qui.
  • Un indovinello, quanti utenti GNU/Linux servono per svitare una lampadina? La risposta la trovate nel post di Dario Cavedon, qui :)
  • I propositi del mio caro amico Juhan per il 2015. Qui.  Solo che quando ha scritto il post non ha considerato che sarebbero potute arrivare mie proposte...prossimamente vi sveleremo ogni cosa :) Comunque, Juhan è un grande!!!
  • Un corso con i baffi è quello che sta portando avanti Michele Adduci. Il corso di Modern C++, il cui indice lo trovate qui. Ma lo state seguendo, vero?? Dal numero delle visite, pare proprio di si. :) 
  • È stato tradotto in italiano il numero 82 della rivista Full Circle (notizia che avrei dovuto pubblicare un mese fa, ma me ne sono dimenticato). Qui.
 Alla prossima!