<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BloggerCrew &#187; Bash</title>
	<atom:link href="http://www.bloggercrew.com/category/appunti-digitali/bash-appunti-digitali/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bloggercrew.com</link>
	<description>Blog meets Technology</description>
	<lastBuildDate>Thu, 07 Jul 2011 11:14:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Script per convertire colori da HTML a RGB e viceversa</title>
		<link>http://www.bloggercrew.com/2010/05/script-bash-per-convertire-colori-da-html-a-rgb-viceversa/</link>
		<comments>http://www.bloggercrew.com/2010/05/script-bash-per-convertire-colori-da-html-a-rgb-viceversa/#comments</comments>
		<pubDate>Tue, 18 May 2010 17:06:40 +0000</pubDate>
		<dc:creator>Luca Scalvi</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[colori html]]></category>
		<category><![CDATA[convertitore]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[rgb]]></category>

		<guid isPermaLink="false">http://www.bloggercrew.com/?p=786</guid>
		<description><![CDATA[Uno script veloce veloce che converte i colori da notazione HTML (esadecimale) a RGB e viceversa. Lo script vi propone le due alternative, selezionabili premendo 1 o 2. E&#8217; scritto in bash e gira solo su Linux. Ho testato lo script su MAC OS X ma non funziona, colpa dell&#8217;operatore expr #!/bin/bash #Stampa il menù ...]]></description>
			<content:encoded><![CDATA[<p>Uno script veloce veloce che converte i colori da notazione HTML (esadecimale)  a RGB e viceversa. Lo script vi propone le due alternative, selezionabili premendo 1 o 2. E&#8217; scritto in bash e gira solo su Linux. Ho testato lo script su MAC OS X ma non funziona, colpa dell&#8217;operatore <strong>expr</strong><span id="more-786"></span></p>
<pre class="brush:bash">
#!/bin/bash
#Stampa il menù iniziale
clear
echo "===HTML to RGB converter==="
echo ""
echo "1.      HTML -> RGB"
echo "2.      RGB -> HTML"
echo ""
echo "==========================="
#Salva la scelta fatta dall'utente nella variabile menu
read menu

#Conversione HTML -> RGB
 if [ $menu -eq "1" ]; then

	echo "Inserisci il valore del colore in notazione HTML:"

	#Cattura l'input dell'utente
	read color_HTML

	#Trasforma tutti i caratteri in Maiuscolo
	color_HTML=$(echo $color_HTML | tr '[:lower:]' '[:upper:]') 

	#Divide la stringa per individuare i valori di R,G,B
	r=$(expr substr $color_HTML 1 2)
	g=$(expr substr $color_HTML 3 2)
	b=$(expr substr $color_HTML 5 2)

	#Converte r,g e b da HEX a DEC
	r_dec=$(echo "ibase=16; $r" | bc )
	g_dec=$(echo "ibase=16; $g" | bc )
	b_dec=$(echo "ibase=16; $b" | bc )

	echo R: $r_dec G: $g_dec B: $b_dec
 fi

#Conversione RGB -> HTML
 if [ $menu -eq "2" ]; then

	#Acquisisce separatamente i valori di R,G,B
	echo "Inserisci il valore di R:"
	read r_in

	echo "Inserisci il valore di G:"
	read g_in

	echo "Inserisci il valore di B:"
	read b_in

	#Converte r,g e b da DEC a HEX
	r_hex=$(echo "ibase=10;obase=16; $r_in" | bc )
	g_hex=$(echo "ibase=10;obase=16; $g_in" | bc )
	b_hex=$(echo "ibase=10;obase=16; $b_in" | bc )

	lung_r_hex=$(echo `expr length $r_hex`)
	lung_g_hex=$(echo `expr length $g_hex`)
	lung_b_hex=$(echo `expr length $b_hex`)

		#Se il valore convertito risulta < 2 caratteri aggiunge uno 0 davanti al suo valore
		if [ $lung_r_hex -lt "2" ]; then
		 r_hex=$(echo "0$r_hex")
		fi
		if [ $lung_g_hex -lt "2" ]; then
		 g_hex=$(echo "0$g_hex")
		fi
		if [ $lung_b_hex -lt "2" ]; then
		 b_hex=$(echo "0$b_hex")
		fi
	echo "HTML:#"$r_hex$g_hex$b_hex
 fi
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bloggercrew.com/2010/05/script-bash-per-convertire-colori-da-html-a-rgb-viceversa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>UK TV per MAC OS X e Linux</title>
		<link>http://www.bloggercrew.com/2010/05/vedere-bbc-canali-inglesi-streaming-formula-1-su-uk-tv-per-mac-os-x-linux/</link>
		<comments>http://www.bloggercrew.com/2010/05/vedere-bbc-canali-inglesi-streaming-formula-1-su-uk-tv-per-mac-os-x-linux/#comments</comments>
		<pubDate>Sat, 15 May 2010 15:49:15 +0000</pubDate>
		<dc:creator>Luca Scalvi</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[formula 1]]></category>
		<category><![CDATA[MAC OS X]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[tips & tricks]]></category>

		<guid isPermaLink="false">http://www.bloggercrew.com/?p=777</guid>
		<description><![CDATA[EDIT: Potete vedere in diretta in streaming le qualifiche e il Gran premio del Belgio 2010 ->qui Originariamente era UKTVLinux; uno script in bash per Linux che permette di vedere le principali emittenti britanniche in streaming, utlizzando VLC, senza bisogno di proxy o altri trucchetti. Ho realizzato una versione per MAC OS X che funziona ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">
<p style="text-align: center;"><img class="aligncenter" src="http://bloggercrew.com/images/canali_inglesi.jpg" alt="uk_tv_mac_bloggercrew" /></p>
<h2><strong>EDIT:</strong> Potete vedere in diretta in streaming le qualifiche e il Gran premio del Belgio 2010 -><a href="http://www.bloggercrew.com/2010/08/formula-1-in-diretta-streaming-spa-francorchamps-2010-beta"><strong><em>qui</em></strong></a></h2>
<p><br/><br />
<br/><br />
<br/></p>
<p>Originariamente era <strong>UKTVLinux</strong>; uno script in bash per Linux che permette di vedere le principali emittenti britanniche in streaming, utlizzando <strong>VLC</strong>, senza bisogno di <strong>proxy</strong> o altri trucchetti. Ho realizzato una versione per <strong>MAC OS X</strong> che funziona perfettamente, basta rispettare i pochi requisiti:</p>
<p><span id="more-777"></span><br />
- Lo script per funzionare correttamente necessità di <strong>VLC versione 1.0.0</strong> o superiore<br />
- VLC deve essere installato nella cartella principale delle applicazioni: <strong>/Applications</strong><br />
- lo script deve avere i permessi di esecuzione, almeno <strong>a+x</strong></p>
<p>Il funzionamento è semplicissimo, una volta lanciato lo script da terminale con <strong>./[VOSTRA_DIRECTORY]/uktvmac.sh</strong> vi verrà chiesto di scegliere uno dei canali presenti in elenco. Una volta effettuata la scelta, si aprirà automaticamente VLC che comincerà a riprodurre il flusso video.<br />
Non servono ne proxy, ne accrocchi particolari <img src='http://www.bloggercrew.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Il flusso video è ottimo (penso con res. max. di <strong>720&#215;576</strong>) e a parte alcune ovvie bufferizzazioni, l&#8217;immagine è fluida. Oggi ho seguito le prove libere di Formula 1, che in italia non si vedono (grazie RAI e SKY) e le qualifiche. La qualità del flusso come detto è stata eccellente e non ho notato particolari disservizi.</p>
<h4><span style="color: #0072cf;"><strong>Download</strong></span></h4>
<hr />UK TV MAC [ <strong><a rel="dofollow" href="http://www.bloggercrew.com/uploads/uktvMAC.zip">Link</a></strong> ] ZIP (1,9 Kb)<br />
UK TV Linux [ <strong><a rel="dofollow" href="http://www.bloggercrew.com/uploads/uktvlinux.tar.gz">Link</a></strong> ] TAR.GZ (1,8 Kb)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bloggercrew.com/2010/05/vedere-bbc-canali-inglesi-streaming-formula-1-su-uk-tv-per-mac-os-x-linux/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>DHCP Monitor ( Linux e MAC )</title>
		<link>http://www.bloggercrew.com/2010/03/dhcp-monitor-linux-e-mac/</link>
		<comments>http://www.bloggercrew.com/2010/03/dhcp-monitor-linux-e-mac/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 18:29:55 +0000</pubDate>
		<dc:creator>Luca Scalvi</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[MAC OS X]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tips & tricks]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.bloggercrew.com/?p=47</guid>
		<description><![CDATA[Quando in una rete (munita anche di accesso Wi-Fi) si comincano ad avere due o più pc sarebbe meglio tenere monitorata la situazione degli IP occupati nella rete, per fare un&#8217;analisi su che IP vengono utilizzati. Se poi abbiamo tutti i pc in rete con un IP statico è ancora più semplice scovare qualche potenziale ...]]></description>
			<content:encoded><![CDATA[<p>Quando in una rete (munita anche di accesso Wi-Fi) si comincano ad avere due o più pc sarebbe meglio tenere monitorata la situazione degli IP occupati nella rete, per fare un&#8217;analisi su che IP vengono utilizzati. Se poi abbiamo tutti i pc in rete con un IP statico è ancora più semplice scovare qualche potenziale intruso. Facciamola breve. Per realizzare un processo che controlli in automatico la presenza o meno di IP sulla nostra rete, ci servono 3 elementi: uno <b>script</b>, una lista di IP da pingare e il <b>crontab</b>.</p>
<p>Cominciamo con il più semplice: la lista di IP.<br />
Non è altro che un file di testo nel mio caso, in cui c&#8217;è l&#8217;elenco degli IP che il nostro DHCP può assegnare ad un pc che si connette alla nostra rete (basta inserire per es: 192.168.1.1 fino a 192.168.1.255 )<br />
Io ho creato l&#8217;elenco con Excel, il quale permette di creare una lista di numeri progressiva inserendo il primo ed il secondo valore. Trascinando la casella in basso, vi creerà l&#8217;elenco progressivo; non dovete fare altro che fermarvi al 255esimo valore, copiarlo ed incollarlo in un file che nel mio caso ho chiamato <b>lista.txt</b></p>
<p><span id="more-47"></span></p>
<h3><span style="color: #0072cf;"><strong>Script bash</strong></span></h3>
<pre class="brush:bash">
#! /bin/bash
#Costanti
page_html="/home/server/dhcp_status.html"
lista="/home/server/lista.txt"
rm $page_html
echo '' >> $page_html
echo '
<pre>
<div align="center"><b><font size="+1"><font size="+1">DHCP Monitor</font></font></div>

</b></pre>
<p>' >> $page_html<br />
if [ ! -f $1 ]; then<br />
	echo "Il file specificato non esiste"<br />
	exit 1<br />
fi</p>
<p>NUM_PACKET=2</p>
<p>for ipaddr in `cat $lista`; do<br />
	if ping -c $NUM_PACKET $ipaddr &#038;> /dev/null; then<br />
		echo '
<pre>'$ipaddr '<span style="color: #FF0000;"><b>ONLINE</span></b></pre>
<p>' >> $page_html<br />
	else<br />
		echo '
<pre>'$ipaddr '<b>offline</b></pre>
<p>' >> $page_html<br />
	fi<br />
done
</pre>
<p>MAC OS X riesce ad interpretare gli script sh che girano su linux, proprio perchè al suo interno batte un cuore *nix<br />
Le directory che vedete indicate, sono ovviamente personalizzabili. Le ho inizializzate come costanti, così dovrete modificare solo questa parte:</p>
<pre class="brush:bash">
#Costanti
page_html="/home/server/dhcp_status.html"
lista="/home/server/lista.txt"
</pre>
<p>Potete collocare lo script dove meglio credete, l&#8217;importante è che <span style="color: #FF0000;"><strong>il file *.sh e il file lista.txt siano nella stessa directory!!</strong></span></p>
<p>Le altre parti personalizzabili sono queste: </p>
<pre class="brush:bash">
echo '' >> $page_html
echo '
<pre>
<div align="center"><b><font size="+1"><font size="+1">DHCP Monitor</font></font></div>

</b></pre>
<p>' >> $page_html
</pre>
<pre class="brush:bash">
echo '
<pre>'$ipaddr '<span style="color: #FF0000;"><b>ONLINE</span></b></pre>
<p>' >> $page_html</p>
<p>		echo '
<pre>'$ipaddr '<b>offline</b></pre>
<p>' >> $page_html
</pre>
<h3><span style="color: #0072cf;"><strong>Crontab</strong></span></h3>
<p>Una volto collocati i due file visti in precedenza nella medesima directory, dobbiamo impostare il sistema in modo da ripetere il controllo ciclicamente. Per farlo usiamo il crontab, uno strumento utilissimo presente sia su *nix che su MAC OS X<br />
Digitare da terminale<br />
<code>crontab -e</code></p>
<p>Indipendentemente dall&#8217;editor con cui verrà aperto il cron ( con vim, di default su MAC ho litigato un pò, ma dopo due o tre tentativi sono riuscito; dovete richiamare la modalità inserimento premendo ESC) inserite questa riga:</p>
<p><span style="color: #086892;">Per *nix</span><br />
<code>*/10 * * * * /bin/bash PERCORSO_DELLOSCRIPT lista.txt</code></p>
<p><span style="color: #086892;">Per MAC OS X</span><br />
<code>*/10 * * * * sh PERCORSO_DELLOSCRIPT lista.txt</code></p>
<p>In questo modo lo script verrà eseguito ogni 10 minuti, più o meno il tempo che impiega a scansionare dal primo all&#8217;ultimo IP della lista<br />
fate bene attenzione che lista.txt è un parametro dello script, percui va scritto staccato di uno spazio dal percorso dello script. Nel mio caso avrò:</p>
<p><code>*/10 * * * * /bin/bash  /home/luca/DHCPMONITOR/ipscan.sh lista.txt</code></p>
<p>Per una dimostrazione potete dare un occhio qui: <a href="http://demo.bloggercrew.com/dhcpmonitor/dhcp_status.html" target="_blank"><b>DEMO</b></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bloggercrew.com/2010/03/dhcp-monitor-linux-e-mac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IP change log</title>
		<link>http://www.bloggercrew.com/2010/02/ip-change-log/</link>
		<comments>http://www.bloggercrew.com/2010/02/ip-change-log/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 18:21:42 +0000</pubDate>
		<dc:creator>Luca Scalvi</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tips & tricks]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.bloggercrew.com/?p=37</guid>
		<description><![CDATA[Tempo fa ho avuto dei grossi problemi di linea. Subivo dalle 3 alle 4 disconnessioni al giorno, dovute alla precarietà della linea internet nella mia zona. Dopo numerose chiamate al centro assistenza, nulla di fatto; insistevano dicendo che era il mio modem ecc ecc&#8230;.al che ho deciso di dimostrare con carte alla mano tutti i ...]]></description>
			<content:encoded><![CDATA[<p>Tempo fa ho avuto dei grossi problemi di linea. Subivo dalle 3 alle 4 disconnessioni al giorno, dovute alla precarietà della linea internet nella mia zona. Dopo numerose chiamate al centro assistenza, nulla di fatto; insistevano dicendo che era il mio modem ecc ecc&#8230;.al che ho deciso di dimostrare con carte alla mano tutti i cambi di IP che subivo durante la giornata ( cambi di IP = disconnessione dalla linea ADSL ). Mi serviva un programma che mi segnalasse, o meglio, che facesse lo storico delle disconnessioni. Una volta realizzato lo script e lanciato per 10 gg, ho raccolto circa 30 disconnessioni!. Finalmente si sono convinti a fare uscire un tecnico&#8230;. risultato? avevo il rapporto segnale/rumore più scadente della zona, dovuto appunto ad un gusto in centrale. Mi ci è voluto un pò ma alla fine ho risolto!<br />
Parliamo ora dello script vero e proprio:<br />
è composto da due parti, due script separati:</p>
<li> un file che controlla che ip abbiamo, collegandosi al sito <strong>http://checkip.dyndns.org</strong></li>
<li>l&#8217;altro invece è il core vero e proprio; svolge le funzioni di confronto e di notifica del cambio di ip.</li>
<p>Nel mio caso il cambiamento di ip viene salvato in un file <strong>*.html</strong> e in uno <strong> *.txt</strong> che mi serve per altri scopi. Si può personalizzare per avvisare del cambio di ip via mail ad esempio.</p>
<p>Ecco il codice del primo, che chiamerò per comodità <strong>ip_check.sh</strong>:</p>
<pre class="brush:bash">
#!/bin/bash
wget http://checkip.dyndns.org/ -q -O - | grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>' > "/home/server/scripts/ip_reg/myip.txt"
</pre>
<p><span id="more-37"></span><br />
Dovrete cambiare la directory di output impostandola secondo le vostre esigenze.</p>
<p>Vediamo ora il codice del core vero e proprio:</p>
<pre class="brush:bash">
#!/bin/bash

# ##########################################################
# Name: IP Change log and notifier
#
# Distributed under the terms of GNU GPL version 3 or later
# Copyright (C) Luca Scalvi (luca.scalvi(a)yahoo.it)
# Date: 20090304
# Last updated: n/a
# version: 1.0
# ##########################################################

LOG=/home/server/scripts/ip_reg/ip_change.txt
#lancia lo script che verifica qual'è l'ip attuale
bash /home/server/scripts/ip_reg/my_ip.sh

OLD_IP=`cat $LOG`

y=`cat /home/server/scripts/ip_reg/myip.txt`

# salva l'ip corrente
    echo $y > $LOG

# controlla se l'ip è cambiato

# se siamo stati disconnessi per un lungo periodo
    if [[ -z "$OLD_IP" ]] &#038;&#038; [[ "$y" ]]; then

        # segnala cambio di ip
        echo 'Nuovo IP per' `hostname` 'is:' $y 'on ' `date +"%Y-%m-%d %H:%M"`
echo `date +"%Y-%m-%d %H:%M"` 'Nuovo IP per' `hostname` 'is:' $y >> /home/server/scripts/ip_reg/ip_change_log.txt
# struttura file HTML
echo '<font size="-1">'`date +"%Y-%m-%d %H:%M"` 'Nuovo IP per' `hostname` ':' '<span style="color: rgb(30, 144, 255);">' $y '</span></font>' >> /home/server/www/ip_change_log.html

    # se l'ip è cambiato dall'ultimo check
    elif [[ "$OLD_IP" ]] &#038;&#038; [[ "$y" ]]; then

        if [ "$y" != "$OLD_IP" ]; then
        # segnala cambio di ip
        echo 'Nuovo IP per' `hostname` 'is:' $y 'on ' `date +"%Y-%m-%d %H:%M"`
echo `date +"%Y-%m-%d %H:%M"` 'Nuovo IP per' `hostname` 'is:' $y >> /home/server/scripts/ip_reg/ip_change_log.txt
# struttura file HTML
echo '<font size="-1">'`date +"%Y-%m-%d %H:%M"` 'Nuovo IP per' `hostname` ':' '<span style="color: rgb(30, 144, 255);"><b>' $y '</b></span><b></b></font>' >> /home/server/www/ip_change_log.html
        fi
    fi

exit 0
</pre>
<p>Anche in questo caso l&#8217;output è personalizzabile. Questa è la versione standard. Mentre questa è la versione più carina. Non riporto tutto lo script ma solo la parta riguardante la struttura HTML:</p>
<pre class="brush:bash">
echo '<font size="-1">'`date +"%Y-%m-%d %H:%M"` 'Nuovo IP per' `hostname` ':' '<span style="color: #1E90FF;"><b>' $y '</span></b></font>' >> /home/server/www/sources/ip_change_log.html
rm /home/server/www/afooter.html
echo '<body background="http://www.lucasweb.net/home/wp-content/gallery/varie/footer_img_0.png">
<div align="center"><font color="#708090">Ultima disconnessione: '`date +"%Y-%m-%d %H:%M"` '- IP:</font> <span style="color: #1E90FF;"><b>' $y '</span></b>' > /home/server/www/afooter.html
</pre>
<p>Produce un risultato simile a questo: <a href="http://demo.bloggercrew.com/ipchangelog/ip_change_log.html" target="_blank">Demo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bloggercrew.com/2010/02/ip-change-log/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Concept: WinMX Web Server (WWS)</title>
		<link>http://www.bloggercrew.com/2010/02/concept-script-winmx-web-server-wws/</link>
		<comments>http://www.bloggercrew.com/2010/02/concept-script-winmx-web-server-wws/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 18:14:09 +0000</pubDate>
		<dc:creator>Luca Scalvi</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[metis]]></category>
		<category><![CDATA[p2p]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[winmx]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.bloggercrew.com/?p=30</guid>
		<description><![CDATA[Ho realizzato uno script in bash che permetta di visualizzare la situazione dei download di WinMX direttamente da web. Lo script è primitivo, visualizza il nome del file in download e la sua percentuale di completamento. Ovviamente come avrete capito c&#8217;è bisogno di una distro GNU/Linux per far girare questo script. I casi sono due: ...]]></description>
			<content:encoded><![CDATA[<p><br/><br />
<a href="http://www.bloggercrew.com/2010/02/concept-script-winmx-web-server-wws/"><img alt="wws_logo_bloggercrew" src="http://img641.imageshack.us/img641/1858/wwslogo.png" title="wws_logo_bloggercrew" class="aligncenter" width="235" height="78" /></a><br />
<br/><br />
Ho realizzato uno script in bash che permetta di visualizzare la situazione dei download di WinMX direttamente da web. Lo script è primitivo, visualizza il nome del file in download e la sua percentuale di completamento.</p>
<p>Ovviamente come avrete capito c&#8217;è bisogno di una distro GNU/Linux per far girare questo script.</p>
<p>I casi sono due: o avete un server linux muletto che fa da p2p server sul quale c&#8217;è installato WinMX oppure potete optare per la mia soluzione. Ho un bel server con installato Ubuntu 32 bit sul quale gira una macchina virtuale XP. Su XP c&#8217;è installato WinMX il quale salva i file in download in una cartella condivisa con samba del server Ubuntu. In questo modo le dimensioni della macchina virtuale non raggiungono livelli abominevoli e salvando su una cartella condivisa e fisicamente collocata sul server Ubuntu, posso gestire meglio le funzioni dello script.</p>
<p>Ecco il codice commentato:<span id="more-30"></span></p>
<pre class="brush:bash">
#!/bin/bash

# ##########################################################
# Name: WinMX Web Monitor
#
# Distributed under the terms of GNU GPL version 3 or later
# Copyright (C) Luca Scalvi (luca.scalvi(a)yahoo.it)
# Date: 20090928
# Last updated: 20090930
# version: Beta 0.2
# ##########################################################

#Costanti
page_html="/home/server/www/P2P/winmx.html"
folder_winmx="/home/server/NetDrive/WinMX"
header="__INCOMPLETE___" #NON MODIFICARE

#Aggiorna il file eliminando quello vecchio
rm $page_html

#Lista il contenuto della directory /home/server/NetDrive/WinMX
ls $folder_winmx > /home/server/www/P2P/winmx.txt

#Conta le righe ( quindi i file ) del file /home/server/www/P2P/winmx.txt
righe=$(ls $folder_winmx | wc -l)

#Setta riga a 0
riga=0

#Ciclo principale
while [ $riga -lt $righe ]; do
let riga+=1
current=$(head -$riga /home/server/www/P2P/winmx.txt | tail -1)

#Trova la dimensione dei file contenuti nella directory /home/server/NetDrive/WinMX
dimensione_down=$(stat -c%s $folder_winmx/$current)

#Toglie __INCOMPLETE___ e .avi dal nome del file
nome=$(echo $current | sed 's/__INCOMPLETE___//g' | sed 's/.avi//g' )

#Estrazione ultimi 8 caratteri
dimensione_tot_hex_low=$(echo $nome | sed 's/^.*\(........\)$/\1/' )
echo $dimensione_tot_hex_low > /home/server/www/P2P/.dthl

#Trasforma tutti i caratteri da minuscoli a MAIUSCOLI
dimensione_tot_hex_upp=$(cat '/home/server/www/P2P/.dthl' | tr '[a-z]' '[A-Z]')

#Conversione Hexadecimal -> Decimal
dimensione_tot=$(echo "ibase=16; $dimensione_tot_hex_upp" | bc )

#Calcola la % di completamento del file
dim_virgola=$(echo " $dimensione_down / $dimensione_tot " | bc -l )
dim_decimali=$(echo '0'$dim_virgola )
percentage=$(echo "$dim_decimali * 100" | bc -l )
echo $percentage > /home/server/www/P2P/.tmp
perc_trunk=$(cat '/home/server/www/P2P/.tmp' | cut -c1-5)

#Controlla se il file Ã¨ completo o meno
if [[ $current =~ $header ]]; then

echo '<b>'$nome'</b> - Completo al: <b>'$perc_trunk'%</b>

' >> $page_html

else

echo '<b>'$nome'</b> - <b><span style="color: rgb(255, 0, 0);">FILE COMPLETATO!</span></b>

' >> $page_html
fi
done

#Struttura file HTML
echo '<font size="-1">Totale file: <b>' $righe'</b>' >> $page_html
echo '<font size="-1">Ultimo aggiornamento:' >> $page_html
echo '<b>' >> $page_html
date >> $page_html
echo '</b></font>' >> $page_html
echo '<font size="-1">Note:</font>' >> $page_html
echo '<font size="-1">I file contenenti hash finale sono incompleti</font>' >> $page_html
echo '' >> $page_html
echo '' >> $page_html
echo '----------' >> $page_html
echo '<font size="-1">About:</font>' >> $page_html
echo '<font size="-1"><span style="color: rgb(255, 0, 0);">Win</span><span style="color: rgb(0, 255, 0);"<MX</span> Web Server Beta 0.1</font>' >> $page_html
</pre>
<p>La sezione <strong>#Struttura file HTML</strong> è completamente personalizzabile e potete impostarlo come volete.<br />
Per facilitare la personalizzazione ho impostato le directory come costanti. Personalizzate queste voci e lo script sarà pronto all&#8217;uso</p>
<pre class="brush:bash">
#Costanti
page_html="/home/server/www/P2P/winmx.html"
folder_winmx="/home/server/NetDrive/WinMX"
</pre>
<p>Per automatizzare il tutto, ricorriamo al Cron. Da terminale digitare<br />
<code>crontab -e</code><br />
ed inserire la seguente riga:<br />
<code>  * *   *   *   *    bash /directory_dello_script/nome_script.sh</code><br />
In questo modo lo script verrà lanciato ogni minuto, dandovi una situazione sempre aggiornata</p>
<p>Clicca sul link per vedere l&#8217;output di esempio: <a href="http://demo.bloggercrew.com/wws/wws.html" target="_blank">DEMO</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bloggercrew.com/2010/02/concept-script-winmx-web-server-wws/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
