Bash -- aiuto creazione script

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
acquarica
Prode Principiante
Messaggi: 216
Iscrizione: martedì 15 agosto 2006, 10:22
Contatti:

Bash -- aiuto creazione script

Messaggio da acquarica »

Salve a tutti,
qualche giorno fa stavo provando a fare uno script in bash ma siccome non ricordavo molto bene il linguaggio ho iniziato a rinfrescarmi la memoria con un semplice programmino... solo che al momento di farlo partire... Errore! l'ho dato a degli amici e a loro funziona... credo allora che mi manchi qualche pacchetto... spero che qualcuno mi sappia illuminare...  ;)

ps il codice è questo:

Codice: Seleziona tutto

#!/bin/bash

for ((t=128; t<=255; t++))
do
	echo -n "$t"
done
echo  -n " ciao"

exit 0
e  il terminale mi risponde così:

Codice: Seleziona tutto

nomefile.sh: 3: Syntax error: Bad for loop variable
Ultima modifica di acquarica il giovedì 28 giugno 2007, 19:39, modificato 1 volta in totale.
Ho visto entrare nell'oceano come brocche d'acqua sorgente tutte le gocce dei temporali.
Avatar utente
bite
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3798
Iscrizione: sabato 19 maggio 2007, 22:10

Re: Bash -- non funzionano le iterazioni

Messaggio da bite »

Funziona anche a me.

Non credo che si tratti di un pacchetto mancante. Non è che hai ridefinito t in qualche modo?
Avatar utente
acquarica
Prode Principiante
Messaggi: 216
Iscrizione: martedì 15 agosto 2006, 10:22
Contatti:

Re: Bash -- non funzionano le iterazioni

Messaggio da acquarica »

uhm... se a te funziona perché a me non dovrebbe andare?  >:(  :-\
Ho visto entrare nell'oceano come brocche d'acqua sorgente tutte le gocce dei temporali.
marcellinux
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 500
Iscrizione: lunedì 9 ottobre 2006, 16:19
Località: Termoli (Campobasso)
Contatti:

Re: Bash -- non funzionano le iterazioni

Messaggio da marcellinux »

a me funziona , cmq aggiungici un echo in più per andare a capo all'interno del ciclo
#!/bin/bash

for ((t=128; t<=255; t++))
do
        echo -n "$t"
        echo
done
echo  -n " ciao"

exit 0
Avatar utente
bite
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3798
Iscrizione: sabato 19 maggio 2007, 22:10

Re: Bash -- non funzionano le iterazioni

Messaggio da bite »

marcellinux ha scritto: a me funziona , cmq aggiungici un echo in più per andare a capo all'interno del ciclo
Basta togliere il -n
marcellinux
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 500
Iscrizione: lunedì 9 ottobre 2006, 16:19
Località: Termoli (Campobasso)
Contatti:

Re: Bash -- non funzionano le iterazioni

Messaggio da marcellinux »

grazie x il sugg , funziona
#!/bin/bash

for ((t=128; t<=255; t++))
do
        echo "$t"

done
echo  " ciao"

exit 0 
Avatar utente
acquarica
Prode Principiante
Messaggi: 216
Iscrizione: martedì 15 agosto 2006, 10:22
Contatti:

Re: Bash -- non funzionano le iterazioni

Messaggio da acquarica »

scusate ma il file non si avvia con

Codice: Seleziona tutto

sh nomefile.sh
???
non riesco a capire perchè non funzioni...  >:(
Ho visto entrare nell'oceano come brocche d'acqua sorgente tutte le gocce dei temporali.
marcellinux
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 500
Iscrizione: lunedì 9 ottobre 2006, 16:19
Località: Termoli (Campobasso)
Contatti:

Re: Bash -- non funzionano le iterazioni

Messaggio da marcellinux »

no, dovresti cambiare i permessi al file sh
$ chmod 500 file.sh
$ ./file.sh
Avatar utente
acquarica
Prode Principiante
Messaggi: 216
Iscrizione: martedì 15 agosto 2006, 10:22
Contatti:

[RISOLTO] Re: Bash -- non funzionano le iterazioni

Messaggio da acquarica »

grazie è poco... funziona...  ;)
Ho visto entrare nell'oceano come brocche d'acqua sorgente tutte le gocce dei temporali.
Avatar utente
acquarica
Prode Principiante
Messaggi: 216
Iscrizione: martedì 15 agosto 2006, 10:22
Contatti:

Re: [RISOLTO] Bash -- non funzionano le iterazioni

Messaggio da acquarica »

senza aprire un altro topic chiedo in questo stesso... vorrei creare uno script che faccia il ping di molti indirizzi ip e poi mi restituisca solo gli ip attivi... solo che non voglio aspettare 5 secondi per ogni ip... c'è un modo per fare la cosa più veloce?
questo è il codice fatto finora:

Codice: Seleziona tutto

#!/bin/bash

for ((t=128; t<=130; t++))
do
        ping 10.0.0."$t" -c 2

done
echo  "FINE"

exit 0 
Ho visto entrare nell'oceano come brocche d'acqua sorgente tutte le gocce dei temporali.
Avatar utente
Volans
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4915
Iscrizione: domenica 4 dicembre 2005, 11:25
Contatti:

Re: [RISOLTO] Bash -- non funzionano le iterazioni

Messaggio da Volans »

Se vedi man ping puoi aggiungere -i 0.2 che mette l'intervallo a 0.2 secondi tra i ping, tanto ne fai solo due da quanto vedo.
Per valori minori devi essere root ed è vivamente sconsigliato a meno che non sai cosa stai facendo e c'è un motivo particolare per farlo che non sia flloding o cose simili... ;)
Volans
Prima di scrivere leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
acquarica
Prode Principiante
Messaggi: 216
Iscrizione: martedì 15 agosto 2006, 10:22
Contatti:

Re: [RISOLTO] Bash -- non funzionano le iterazioni

Messaggio da acquarica »

il problema è che non tutti gli ip sono accessibili e quindi quando non pinga resta bloccato su quell'ip per qualche secondo... io vorrei che una volta che l'ip non risponde si passi subito a quello successivo...
Inoltre mi servirebbe un modo per capire gli ip che hanno risposto e nello stesso tempo nascondere tutta la procedura dei ping... sono un po difficile io... ;D
Ho visto entrare nell'oceano come brocche d'acqua sorgente tutte le gocce dei temporali.
Avatar utente
nuu
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 394
Iscrizione: mercoledì 30 maggio 2007, 2:07

Re: [RISOLTO] Bash -- non funzionano le iterazioni

Messaggio da nuu »

acquarica ha scritto: il problema è che non tutti gli ip sono accessibili e quindi quando non pinga resta bloccato su quell'ip per qualche secondo... io vorrei che una volta che l'ip non risponde si passi subito a quello successivo...
Inoltre mi servirebbe un modo per capire gli ip che hanno risposto e nello stesso tempo nascondere tutta la procedura dei ping... sono un po difficile io... ;D
1) puoi impostare il timeout di un'operazione di ping in modo tale da non farle superare mai un tempo prestabilito con l'opzione -w, senza nemmeno la necessità di -c.
2) il modo per capire se l'ip ha risposto e' dato dal valore di ritorno di ping (0 se l'host ha risposto, 1 se no) - ovvero puoi invocare ping e poi controllare la variabile "$?" che in Bash corrisponde al valore di ritorno dell'ultimo comando lanciato
3) puoi nascondere l'output (selettivamente solo quello inviato a stdout, oppure solo a stderr, o tutto l'output) usando le normali redirezioni della shell: ad esempio, ping pippo &>/dev/null non caccierà nessun output (& significa "tutto l'output" - in questo caso, lo giriamo a /dev/null, ovvero lo nascondiamo).

Puoi quindi fare qualcosa tipo:

Codice: Seleziona tutto

#!/bin/bash

for ((t=128; t<=130; t++))
do
	addr=10.0.0."$t"
	echo -n "$addr : "
        ping $addr -w1 &>/dev/null
	if [ $? = 0 ]; then
		echo "UP"
	else
		echo "DOWN"
	fi
done
echo  "FINE"

exit 0 
Ciao
nuu
Learn to pause -- or nothing worthwhile can catch up to you.
Avatar utente
acquarica
Prode Principiante
Messaggi: 216
Iscrizione: martedì 15 agosto 2006, 10:22
Contatti:

Re: [RISOLTO] Bash -- non funzionano le iterazioni

Messaggio da acquarica »

grazie... appena ho 2 minuti provo e ti faccio sapere...  ;)
Ho visto entrare nell'oceano come brocche d'acqua sorgente tutte le gocce dei temporali.
Avatar utente
acquarica
Prode Principiante
Messaggi: 216
Iscrizione: martedì 15 agosto 2006, 10:22
Contatti:

Re: [RISOLTO] Bash -- non funzionano le iterazioni

Messaggio da acquarica »

ok... lo script funziona bene... ora vi devo chiedere qualche implementazione... vorrei che uscissero solo gli ip che sono attivi... poi un'altra cosa che credo si parecchio complicata... accedendo dal browser ad un serie di ip, se attivi, mi viene mostrata una determinata pagina html. A questo punto io volevo sapere: è possibile prendere il testo racchiuso tra e di queste pagine e inserirlo come output insieme all'ip? spero di essere stato chiaro....
saluti
Ho visto entrare nell'oceano come brocche d'acqua sorgente tutte le gocce dei temporali.
Avatar utente
nuu
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 394
Iscrizione: mercoledì 30 maggio 2007, 2:07

Re: Bash -- aiuto creazione script

Messaggio da nuu »

no, le modifiche che chiedi sono molto semplici, si fanno in una riga soltanto. modifica lo script così:

Codice: Seleziona tutto

#!/bin/bash

for ((t=1; t<=1; t++))
do
        addr=10.0.0."$t"
        ping $addr -w1 &>/dev/null
        if [ $? = 0 ]; then
                echo -n "$addr UP, title: "
                echo $(wget -qO - http://$addr | grep "<title>" | sed 's/<\/*title>//g')
        fi
done
echo  "FINE"

exit 0
ovvero:

1) preleva la pagina web senza salvarla, stampandola su stdout (wget -qO - http://$addr)
2) trova la riga contenente il tag (grep "")
3) a questo punto abbiamo qualcosa tipo "titolo", vogliamo eliminare i due tag html, quindi sostituiamo con "", su tutta la riga (sed 's///g')

Tutto chiaro?

Ciao
nuu
Ultima modifica di nuu il venerdì 29 giugno 2007, 1:55, modificato 1 volta in totale.
Learn to pause -- or nothing worthwhile can catch up to you.
Avatar utente
acquarica
Prode Principiante
Messaggi: 216
Iscrizione: martedì 15 agosto 2006, 10:22
Contatti:

Re: Bash -- aiuto creazione script

Messaggio da acquarica »

perfetto!  ;)
solo un'ultima cosa: il titolo è qualcosa del genere "titolo uno ->  parola -> altro", io vorrei far comparire solo "parola"... credo che sia facile...
Ho visto entrare nell'oceano come brocche d'acqua sorgente tutte le gocce dei temporali.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti