Numeri random e testo in box

btf5

Un po’ di hacking, ogni tanto ci vuole.
Tutto è iniziato con un post di Alessio, the Blaster: Un tiradadi per la shell.
Ha incuriosito un mio contatto. Parliamone 😉
Il codice di Alessio è (abl, corretto per bash):

#!/bin/bash
roll() { echo $[RANDOM % $1 + 1]; }
roll $1

ed è OK 😀 ma poteva essere diverso. Perché creare la funzione roll() che viene usata solo in questo script? In un raptus di semplificazione si arriva a rand, script che potrebbe servire in futuro, da abilitare e mettere in ~/bin.

#!/bin/bash
echo $[RANDOM % $1 + 1]

d0

OK, grazie ad Alessio e S_.
Nota: ho scoperto dopo che esiste un utility chiamata rand (non installata). Tanto funziona quella appena creata.

Non è l’unico script che ci ha incuriosito, via Twitter ecco questo: function box() By @bartonski.
Da provare; questa è la versione originale (b0):

#!/bin/bash
function box() { t="$1xxxx";c=${2:-=}; echo ${t//?/$c}; echo "$c $1 $c"; echo ${t//?/$c}; }

box "$@"

d1

Anche qui si può fare un po di maquillage (b1):

#!/bin/bash

function box() { 
    t="$1xxxx"
    c=${2:-=}
    echo ${t//?/$c}
    echo "$c $1 $c"
    echo ${t//?/$c}
}

box "$@"

Non riporto lo screenshot perché non sono ripetitivo 😉
Inoltre la funzione usata solo qui e allora…

#!/bin/bash

t="$1xxxx"
c=${2:-=}
echo ${t//?/$c}
echo "$c $1 $c"
echo ${t//?/$c}

Continua a funzionare come le precedenti.
Posso ovviamente visualizzare un testo di più parole:

d2

C’è però una cosa che si potrebbe –probabilmente– migliorare. Per il comando echo non servono le virgolette; lo stesso sarebbe bello se anche box
Si può fare! (cit.). Ahemmm… non immediatamente, serve un po’ di googlaggio, inizialmente con braces expansion e infine con parameters expansion. Ecco qui: Learning the shell – Lesson 8: Expansion.
Un minimo di editing ed ecco boxb (la b finale sta per bordo):

#!/bin/bash
par="$*"
S=${par::-1}
t="$*xx"
c=${par: -1}
S=${par::-2}
echo ${t//?/$c}
echo "$c $S $c"
echo ${t//?/$c}

d3

OK 😀 allora…

d4

Dopo qualche prova il carattere da usare come bordo viene individuato e resta quello. Semplifico:

#!/bin/bash

t="$*xxxx"
c=o

echo ${t//?/$c}
echo "$c $* $c"
echo ${t//?/$c}

d5

OK! 😀
Notare come è diventato semplice, ancora più semplice di quello di partenza (Linux is simple… (cit.)).
Ma si userà? Perché nell’hack del sito di Shotts ho scoperto tput:

d6
:mrgreen:

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • Man from Mars  Il 19 dicembre 2016 alle 10:08

    Bella Juhan! Hai tirato fuori il box di Bartonski che aveva affascinato la mia mente di giovane smanettino della shell tanto tempo fa…
    Interessante anche l’uso di tput, l’ho visto in parecchi script ma l’ho impiegato poco, impiegando più spesso direttamente i codici di escape ANSI per colori e formati. Devo rispolverare qualche abbozzo di script che ho abbandonato nei cassetti/hard disk!

    • juhan  Il 19 dicembre 2016 alle 10:16

      😀 Stavo appunto pensando di pasticciare un po’ con tput o direttamente con le sequenze ANSI. Per contro c’è il vecchio me che mi dice che tutti i messaggi che compaiono sul terminale sono importanti; e distinguere stderr da stdout.
      Facciamo che aspetto il tuo post poi ci faccio la critica 😉

      • Man from Mars  Il 19 dicembre 2016 alle 10:32

        Il mio post? Quale mio post? Quello che arriverà (forse, chissà – cit.) tra eoni ed eoni? 😉 Se hai tempo da perdere, fai pure.
        Secondo me dovremmo scambiarci un po’ di dettagli sui nostri programmi (capita la battutina?) a breve-medio termine.

  • juhan  Il 19 dicembre 2016 alle 10:19

    Errore mio o del signor WordPress? Sparito il commento di MfM e la mia risposta 😦
    Controllo più tardi se ripescarli (se ci riesco).

    • juhan  Il 19 dicembre 2016 alle 10:22

      OK, tutto a posto; era in moderazione. Cosa significa? Il sig. WP si è dimenticato chi è meu amigo Man from Mars?

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: