Domande su bash

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
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
Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 658
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Domande su bash

Messaggio da darkstaring »

Salve leggere un file di testo partendo dal 5 carattere per ogni riga..
E' possibile farlo con sed?
Grazie
Ultima modifica di darkstaring il gio 7 apr 2011, 11:50, modificato 2 volte in totale.

Avatar utente
masalapianta
Iper Master
Iper Master
Messaggi: 2775
Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:

Re: Sed?

Messaggio da masalapianta »

con sed bat tru non saprei, ma lo puoi fare sicuramente con cut:
cut -c 5- file

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 658
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Sed?

Messaggio da darkstaring »

Perfetto grazie, funziona :)
Grande, mi serviva...

Ciaoo :)

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 658
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: [RISOLTO] Sed? --> cut

Messaggio da darkstaring »

E se volessi passare l'output ad una variabile?
l'output di "echo 10+4 | bc"

Avatar utente
masalapianta
Iper Master
Iper Master
Messaggi: 2775
Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:

Re: Domande su bash

Messaggio da masalapianta »

variabile=`echo 10+4 | bc`
oppure
variabile=$(echo 10+4 | bc)

N.B. "assegnare" non "passare"

pino_otto
Linux 2.x
Linux 2.x
Messaggi: 333
Iscritto il: dom 9 lug 2006, 11:57
Slackware: 14.2
Kernel: 4.4.14-smp
Desktop: KDE 4.14.3
Località: Torino - Canton (China)

Re: Domande su bash

Messaggio da pino_otto »

Per chi e' di Torino e interessa, stasera inizia un minicorso sulla bash presso il LUG di Torino:

http://glugto.org

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 658
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Domande su bash

Messaggio da darkstaring »

E se volessi ciclare tra 2 variabili?
come potrei fare?
es:

Codice: Seleziona tutto

read TARGET

MIN=`echo $TARGET-150 | bc`
MAX=$(echo $TARGET+150 | bc)
echo $MIN $MAX
for TMP in {$MIN..$MAX};  do
..........
 
Ie variabili MIN e MAX sono inizializzate
ma il cilo non và :)

Grazie

Avatar utente
umaga
Packager
Packager
Messaggi: 180
Iscritto il: lun 30 gen 2006, 10:19
Slackware: 13.37
Kernel: 2.6.38.4-smp
Desktop: KDE 4.7
Località: Cagliari

Re: Domande su bash

Messaggio da umaga »

con il costrutto {a..b} non puoi usare variabili al posto di a e b, devono essere numeri fissi.
puoi risolvere pero usando seq:
[code]for TMP in $(seq $MIN $MAX); do[/code]

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 658
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Domande su bash

Messaggio da darkstaring »

umaga ha scritto:con il costrutto {a..b} non puoi usare variabili al posto di a e b, devono essere numeri fissi.
puoi risolvere pero usando seq:

Codice: Seleziona tutto

for TMP in $(seq $MIN $MAX);  do
Tu 6 un grande :)..comunque mi sono allontanato dal pc per andare a fumare e ho fatto un casino :)..doveva creare un file da un pò di righe è ha creato un file da 18GB nella mia home e non ha proseguito perchè non aveva più spazio! :)..ho eliminato :).. ora ci sto attento.. comunque grazie
Offtopic: Avete visto Slackware For Dummies Project questo viewtopic.php?f=12&t=23417
Sarebbe bello avere cose come queste :).. questa è scuola :)

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Domande su bash

Messaggio da joe »

Ne approfitteri per fare anche io una domanda circa l'assegnazione di variabile col metodo di cui avete parlato sopra:

Codice: Seleziona tutto

VAR=$(comando)
VAR=`comando`
Poniamo che l'output del nostro "comando" sia genericamente "pippo".
Che cosa accade quando richiamo la variabile per utilizzarla nel seguito dello script?
1- viene eseguito ogni volta il "comando"
2- viene semplicemente usato il "valore" che quel comando aveva al momento dell'assegnazione, ovvero "pippo" nell'esempio sopra

Mi spiego in altro modo:
il comando viene effettivamente eseguito al momento dell'assegnazione o al momento dell'utilizzo della variabile "${VAR}"?

Chiedo perchè in un mio script avevo appunto usato una variabile assegnandole l'output di un comando che sfruttava wget:

Codice: Seleziona tutto

SIZE=$(wget -S --spider "${LINK}" 2>&1|grep Content-Length |sed 's/.*: //'
Praticamente otteneva l'output e quindi il valore di assegnazione attraverso internet, nella fattispecie la variabile "SIZE" doveva contenere la dimensione in bytes di un file remoto "$LINK".
Nel momento in cui il comando viene eseguito e si interroga il link via internet, lo script rallenta parecchio a seconda della connessione che si ha. Quindi, se il comando viene eseguito all'atto dell'assegnazione e basta, nessun problema. Invece se ogni volta che la variabile viene usata è necessario contattare il LINK lo script sarà molto più lento, spero d'essermi spiegato.
Se quello fosse il caso la soluzione potrebbe essere:

Codice: Seleziona tutto

wget -S --spider "${LINK}" 2>&1|grep Content-Length |sed 's/.*: //' > $TMPFILE
SIZE=$(cat $TMPFILE)
In tal modo l'utilizzo di ${SIZE} non scomoderebbe sicuramente internet con conseguentirallentamenti.
Ho comunque pensato di chiedere per capire un po' meglio la questione.

Avatar utente
masalapianta
Iper Master
Iper Master
Messaggi: 2775
Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:

Re: Domande su bash

Messaggio da masalapianta »

joe ha scritto:Ne approfitteri per fare anche io una domanda circa l'assegnazione di variabile col metodo di cui avete parlato sopra:

Codice: Seleziona tutto

VAR=$(comando)
VAR=`comando`
Poniamo che l'output del nostro "comando" sia genericamente "pippo".
Che cosa accade quando richiamo la variabile per utilizzarla nel seguito dello script?
1- viene eseguito ogni volta il "comando"
2- viene semplicemente usato il "valore" che quel comando aveva al momento dell'assegnazione, ovvero "pippo" nell'esempio sopra
la seconda che hai detto

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Domande su bash

Messaggio da joe »

Grazie della conferma :)

Rispondi