Bash costruire un generatore di caratteri

Area di discussione libera.

Moderatore: Staff

Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
mordecai
Linux 3.x
Linux 3.x
Messaggi: 752
Iscritto il: mer 10 gen 2007, 21:59

Bash costruire un generatore di caratteri

Messaggio da mordecai »

Salve a tutti.
Vorrei sapere se in bash è possibile costruire un generatore di caratteri,un po' come le wordlist.
Praticamente vorrei che la lunghezza della stringa fissa sia di n caratteri,e devono tutti essere lower-case (a,b,..z).
Il tutto salvato in un file di testo,facile.

È possibile farlo in bash?

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Bash costruire un generatore di caratteri

Messaggio da d4z_c0nf »

mordecai ha scritto:Salve a tutti.
Vorrei sapere se in bash è possibile costruire un generatore di caratteri,un po' come le wordlist.
Praticamente vorrei che la lunghezza della stringa fissa sia di n caratteri,e devono tutti essere lower-case (a,b,..z).
Il tutto salvato in un file di testo,facile.

È possibile farlo in bash?
La cosa più immediata che mi viene in mente è questa, anche se credo ci siano modi migliori per farla:

Codice: Seleziona tutto

#!/bin/bash

var="a b c d e f g h i l m n o p q r s t u v z"

for i in $var; do
     for j in $var; do
            for x in $var; do
                for y in $var; do
                        echo $i$j$x$y >> fileditesto
                done
            done
     done
done

Ops, ho ipotizzato che siano 4 i caratteri,
la cosa si può fare ricorsivamente se vuoi..

rock

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Bash costruire un generatore di caratteri

Messaggio da targzeta »

Ecco qui, basta copiare questo script in un file, ad esempio casa.sh:

Codice: Seleziona tutto

#!/bin/bash

function _print
{
  echo ${array[@]};
}

function _incr
{
  if [[ ${array[$1]} == 'z' ]]; then
    {
     (( $1 == 0 )) && exit;
     array[$1]='a';
     _incr $(($1-1));
    }
  else
    array[$1]=$(echo ${array[$1]} | tr 'a-z' 'b-za');
  fi
}

i=0;
while (( $i < $1 ));
do
  array[$i]='a';
  let i++;
done

_print

while _incr $(($i-1));
do
  _print
done
e poi invocarlo passandogli la lunghezza fissa della stringa.

NOTA 0: per controllare la correttezza, basta contare il numero di righe che genera lo script, devono essere 26^N, dove N è la lunghezza fissa delle stringhe da generare. Ad esempio facendo:

Codice: Seleziona tutto

sh casa.sh 2 | wc -l
otterrai 676=26^2

NOTA 1: puoi anche avere un numero minore di caratteri, basta sostituire nella funzione _incr, la 'z' con l'ultimo carattere desiderato. Ad esempio, sostituendo la 'z' con la 'b' otterrai:
a a
a b
b a
b b
Spina

P.S. Più che nella sezione libera, me sembrerebbe meglio spostare il thread nella sezione 'Programmazione'.
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
danix
Staff
Staff
Messaggi: 3289
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 6.12.13 x86_64
Desktop: i3
Località: Verona (VR)
Contatta:

Re: Bash costruire un generatore di caratteri

Messaggio da danix »

spina ha scritto:Ecco qui, basta copiare questo script in un file, ad esempio casa.sh:
Immagine
rofl

[EDIT]
chiedo scusa all'autore del thread, non volevo spammare il topic, quindi ne approfitto per dire anche la mia... :D
Nella guida avanzata di scripting bash c'è uno script di esempio che credo faccia al caso suo, lo riporto nella sua interezza...

Codice: Seleziona tutto

#!/bin/bash
#  Su macchine un po' vecchie, 
#+ potrebbe essere necessario cambiare l'intestazione in #!/bin/bash2.
#
#  Generatore di password casuali per Bash 2.x +
#+ di Antek Sawicki <tenox@tenox.tc>,
#+ che ha generosamente permesso all'autore de Guida ASB il suo utilizzo.
#
# ==> Commenti aggiunti dall'autore del libro ==>


#MATRICE="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
# ==> La password viene formata con caratteri alfanumerici.
LUNGHEZZA="8"
# ==> Se desiderate passaword più lunghe modificate 'LUNGHEZZA'.


while [ "${n:=1}" -le "$LUNGHEZZA" ]
# ==> Ricordo che := è l'operatore "sostiruzione default".
# ==> Quindi, se 'n' non è stata inizializzata, viene impostata ad 1.
do
	PASS="$PASS${MATRICE:$(($RANDOM%${#MATRICE})):1}"
	# ==> Molto intelligente e scaltro.

	# ==> Iniziando dall'annidamento più interno...
	# ==> ${#MATRICE} restituisce la lunghezza dell'array MATRICE.

	# ==> $RANDOM%${#MATRICE} restituisce un numero casuale compreso tra 1
	# ==> e [lunghezza di MATRICE] - 1.

	# ==> ${MATRICE:$(($RANDOM%${#MATRICE})):1}
	# ==> restituisce l'espansione di lunghezza 1 di MATRICE 
	# ==> partendo da una posizione casuale.
	# ==> Vedi la sostituzione di parametro {var:pos:lun},
	# ==> con relativi esempi, al Capitolo 9.

	# ==> PASS=... aggiunge semplicemente il risultato al precedente 
	# ==> valore di PASS (concatenamento).

	# ==> Per visualizzare tutto questo più chiaramente, 
	# ==> decommentate la riga seguente
	#                 echo "$PASS"
	# ==> e vedrete come viene costruita PASS,
	# ==> un carattere alla volta ad ogni iterazione del ciclo.

	let n+=1
	# ==> Incrementa 'n' per il passaggio successivo.
done

echo "$PASS"      # ==> Oppure, se preferite, redirigetela in un file.

exit 0
Io lo uso per generare password casuali, ma modificando il valore delle variabili MATRICE e LUNGHEZZA si possono ottenere i risultati che chiedeva l'autore... ad esempio mettendo

Codice: Seleziona tutto

MATRICE="abcdefghijklmnopqrstuvwxyz"
la stringa generata sarà solo alfabetica e solo con lettere minuscole, e modificando LUNGHEZZA si otterranno stringhe più o meno lunghe...
Spero possa essere utile :D


Ciau
danix
danix ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Bash costruire un generatore di caratteri

Messaggio da d4z_c0nf »

spina ha scritto:....
Spina

P.S. Più che nella sezione libera, me sembrerebbe meglio spostare il thread nella sezione 'Programmazione'.
E' sicuramente una soluzione, solo che fa solo la "combinazione" delle prime n lettere dell'alfabeto.
Dove n è la lunghezza della stringa

mordecai
Linux 3.x
Linux 3.x
Messaggi: 752
Iscritto il: mer 10 gen 2007, 21:59

Re: Bash costruire un generatore di caratteri

Messaggio da mordecai »

Grazie risolto! =D>

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Bash costruire un generatore di caratteri

Messaggio da d4z_c0nf »

mordecai ha scritto:Grazie risolto! =D>
come?

rock

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Bash costruire un generatore di caratteri

Messaggio da targzeta »

d4z_c0nf ha scritto:
spina ha scritto:....
Spina

P.S. Più che nella sezione libera, me sembrerebbe meglio spostare il thread nella sezione 'Programmazione'.
E' sicuramente una soluzione, solo che fa solo la "combinazione" delle prime n lettere dell'alfabeto.
Dove n è la lunghezza della stringa
??? A me da tutte le combinazioni possibili di lunghezza N, fatte con tutte le lettere dell'alfabeto.

Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: Bash costruire un generatore di caratteri

Messaggio da d4z_c0nf »

spina ha scritto:
d4z_c0nf ha scritto:
spina ha scritto:....
Spina

P.S. Più che nella sezione libera, me sembrerebbe meglio spostare il thread nella sezione 'Programmazione'.
E' sicuramente una soluzione, solo che fa solo la "combinazione" delle prime n lettere dell'alfabeto.
Dove n è la lunghezza della stringa
??? A me da tutte le combinazioni possibili di lunghezza N, fatte con tutte le lettere dell'alfabeto.

Spina
AHHAHA, scusami spina, ho detto una super va**ata.
L'avevo provato e comprovato la funzionalità e mi ero fatto questa domanda visto il tuo esempio che finisce a "bb".
E quando ho postato mi sono scordato di essermi risposto "sei un pirla".
Scusa tanto.

rock

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Bash costruire un generatore di caratteri

Messaggio da targzeta »

mordecai ha scritto:Grazie risolto! =D>
Potresti scrivere [RISOLTO] nel nome del thread allora :)

Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Rispondi