Torna indietro   Hardware Upgrade Forum > Software > Linux, Unix, OS alternativi > Discussioni Ufficiali e Documentazione

Apple MacBook Air M3: chi deve davvero comprarlo? La recensione
Apple MacBook Air M3: chi deve davvero comprarlo? La recensione
A distanza di circa 8 mesi arriva l’importante aggiornamento dei MacBook Air: nessun cambiamento estetico, ma una revisione hardware interna con l’upgrade al processore M3. Le prestazioni migliorano rispetto alle generazioni precedenti, e questo fa sorgere una domanda spontanea: a chi è rivolto oggi questo laptop? Cerchiamo di capirlo nella nostra recensione 
ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ultrawide si fondono
ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ultrawide si fondono
Da ASUS un monitor particolare ma molto completo: principalmente indirizzato al videogiocatore, può essere sfruttato con efficacia anche per attività creative e di produzione multimediale
Dreame L10s Pro Ultra Heat: la pulizia di casa tutta sostanza
Dreame L10s Pro Ultra Heat: la pulizia di casa tutta sostanza
Il nuovo robot aspirapolvere domestico di Dreame abbina funzionalità complete a un moccio flottante che raggiunge al meglio gli angoli delle pareti. Un prodotto tutto in uno semplice da utilizzare ma molto efficace, in grado di rispondere al meglio alle necessità di pulizia della casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-11-2009, 14:22   #1
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1046
[Thread Ufficiale] Scripting

Lo script, un piatto finlandese...
Molti di voi avranno sentito parlare di script o scripting nell'ambito della programmazione. Ma cos'è veramente uno script?
Per script si intende un programma che viene eseguito attraverso un altro programma, chiamato interprete dello script.
Attraverso uno script vengono eseguite una serie di istruzioni e comandi che agiscono in base a dei parametri, che possono essere le condizioni del sistema in quel momento, o alcune variabili di ingresso. Uno script può anche non avere nessun parametro di ingresso, ma essere programmato per fare sempre la stessa cosa, in maniera ripetitiva, salvandoci da un bel po' di noia che si avrebbe a digitare sempre lo stesso comando.
Alcuni linguaggi di script famosi sono:
  • SH o shell script, interpretati da una shell *nix (la più usata in GNU/Linux è Bash)
  • BAT o file batch, interpretati dal CMD.EXE di Windows
  • Perl il cui interprete si chiama per l'appunto perl
  • Python il cui interprete si chiama per l'appunto python
  • PHP che possono essere richiamati da un server Web attraverso un modulo o da un interprete all'interno del sistema operativo
  • ASP che possono essere richiamati da un server Web attraverso un modulo
e molti altri non meno importanti.

...che può essere gustato in molti modi!
Tutti i sistemi operativi che io conosca hanno almeno un linguaggio di scripting a loro disposizione, più o meno potente. Come potete capire gli script ricoprono un importante ruolo nell'amministrazione del sistema, ad es. quando vogliamo automatizzare una operazione perchè venga eseguita di notte o allo stesso modo su 1000 computer. Non di meno gli script sono importanti per il World Wide Web, attraverso i quali possiamo presentare una pagina creata "al volo" per l'utente a seconda del suo comportamento.
Rimanendo a livello di sistema operativo, mentre nell'ambito Microsoft si tende ad utilizzare poco gli script, in GNU/Linux e in generale in tutti i sistemi *nix (compreso MacOSX) ricoprono una notevole importanza. Infatti l'avvio stesso del sistema operativo si svolge tramite l'esecuzione di una serie di script, e poche sono le operazioni che non si possono automatizzare con questa tecnica, dalla scrittura su CDRW al controllo della situazione metereologica.

Ingredienti di base
Ma come è fatto uno script?
Normalmente si presenta come un file di semplice testo, contenente la sequenza di comandi da eseguire. La potenza e la varietà dei comandi di cui possiamo disporre in uno script dipendono dall'interprete che intendiamo usare per lo script.
Se ad esempio uno script bash che svolge un determinato compito, può generalmente essere riscritto in perl, utilizzando un linguaggio totalmente differente. Vi sono alcune operazioni che possono essere svolte più velocemente e meglio con un linguaggio piuttosto che con un altro, ma in genere ognuno scrive utilizzando quello che conosce meglio .

Le varie scuole di cucina
Penso di non far torto a nessuno dicendo che il linguaggio in assoluto più usato in GNU/Linux per la programmazione degli script di sistema è Bash, in stretta collaborazione con gli strumenti detti coreutils e con programmi come grep, sed e awk.
Il perl la fa da padrone tutte le volte che c'è da elaborare un formato testuale in un altro formato tramite l'uso di PCRE, o Perl Compatible regular Expression

Vediamo un esempio classico di uno script in bash

file ciao.sh
Codice:
#!/bin/bash
echo "Ciao!"
questo script è composto da solo due righe, vediamo come è fatto:
la prima riga, in tutti gli script, comincia con #! seguito dal nome dell'interprete che vogliamo usare per i comandi che seguiranno
la seconda riga è un semplice comando "echo" che fa vedere a video quando scritto tra le virgolette. In bash si possono anche eseguire i costrutti classici della programmazione, come i cicli for, ad esempio con
file pingtutti.sh
Codice:
#!/bin/bash
for ((n=1;n<254;n++)); do {
ping -c1 -w2 192.168.0.$n
}
done
possiamo fare un ping a tutti gli indirizzi ip da 192.168.0.1 sino a 192.168.0.254.

Tutti a tavola
Ho inaugurato questa discussione con l'intento di esplorare il misterioso mondo dello scripting, agli occhi dei profani pura magia, che è uno dei principali motivi per cui mi piace usare GNU/Linux e il free software in generale. Tramite questo topic mi piacerebbe venire a conoscenza di modi "fantasiosi" di usare strumenti come sed e awk, il perl, e quant'altro per domare il sistema e fargli fare quello che dico io, e non quello che vuole lui.
Mano a mano che posterete i vostri script li indicizzerò all'interno di questo primo post, con una breve descrizione di cosa fanno.
A, last but not least, il codice postato è libero da costrizioni, non chiedo di applicarvi la GPL (liberi di farlo se volete), ma quanto meno che ogni utente che passi di qui a leggerlo possa farvi quello che gli pare senza chiedervi il permesso, e senza che eventuali danni ricadano su di voi.

E adesso, sotto con gli script!

Indice:
sshtemp: per evitare la richiesta di autenticità di un host in connessione ssh (Bash)
Reinstallare tutti i .deb che inseriscono almeno un file nella cartella data come argomento (Bash)
Catturare un video da una finestra X11 (Bash + mencoder)
aggiungere una progress-bar alle operazioni con i file .RAR su GNOME (PHP + Zenity)
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”

Ultima modifica di gurutech : 12-11-2009 alle 15:17.
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2009, 14:33   #2
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1046
sshtemp: per evitare la richiesta di autenticità di un host in connessione ssh

Utile per connettersi a host "temporanei" o ai quali ci si deve connettere solo una volta, e utile anche per capire come usare ssh-keyscan e ssh quando si deve scriptare richieste a interi pool di server linux.

Codice:
#!/bin/bash
TARGET="$1"
echo "$1" | grep "@" 2> /dev/null &> /dev/null && TARGET=$(echo $1 | cut -d "@" -f 2)

if ( [ -z $TARGET ] ); then {
  echo "Usage:"
  echo "   $(basename $0) [hostname]"
  echo "       or"
  echo "   $(basename $0) [username]@[hostname]"
  exit 1
}
fi

REACHABLE=0
ping -c1 -w1 $TARGET 2> /dev/null &> /dev/null && REACHABLE=1

if ( [ $REACHABLE -ne 1 ] ); then {
  echo "Host $TARGET is unreachable"
  exit 1
}
fi

TMPFILE=$(mktemp)
ssh-keyscan -H $TARGET > $TMPFILE 2> /dev/null
ssh -o "UserKnownHostsFile $TMPFILE" $1
rm -f $TMPFILE
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2009, 23:54   #3
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
Discussione interessante.
Propongo uno scriptino per distribuzioni Debian based.

Reinstallare tutti i .deb che inseriscono almeno un file nella cartella data come argomento.
Utile in caso di maldestri rm o altri disastri assortiti.
Codice:
#!/bin/bash

FOLDER="$1"

if [ -z "$FOLDER" ]; then
  echo "Utilizzo:"
  echo -e "$(basename $0) [cartella]\n\noppure (piuttosto inutile)\n\n$(basename $0) [file]"
  exit 1
fi

if [ -z "`which apt-file`" ]; then
  echo -e "Installare apt-file!\n\napt-get install apt-file\napt-file update\n\n"
  exit 1
fi

if [ "$(id -u)" != "0" ]; then
  echo "Questo script dev'essere eseguito come root!" 1>&2
  exit 1
fi

PKGS=`comm -12 <(apt-file search $FOLDER | sed 's/\([^: ]*\).*/\1/' | uniq | sort) \
               <(dpkg --get-selections | grep -E \[\[:blank:\]\]install\$ | sed 's/\([^\t ]*\).*/\1/' | uniq | sort)`

apt-get install --reinstall ${PKGS}
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2009, 00:23   #4
Chiancheri
Senior Member
 
L'Avatar di Chiancheri
 
Iscritto dal: Jan 2006
Città: CATANIA
Messaggi: 2100
scusate, non voglio sporcare assolutamente il vostro topic, anzi, spero di parteciparvi e di contribuire attivamente. Vorrei approfittarne per chiedere 2 cose però:

1) una volta creato lo script, come si potrebbe fare per caricarlo su launchpad? so che li vanno i sorgenti dei programmi, ma che "sorgenti" ha uno script!!?? come si fa ad usare launchpad con gli script? Sono assolutamente niubbo di launchpade e vari codehosting. Mai hostato nulla finora...

2) che ne pensate di creare anche un repository comune, revisionato da tutti noi, per hostare i nostri script e renderli scaricabili e/o modificabili dagli utenti? Facciamo una piccola community magari ubuntu (debian), per script e/o programmini, tipo hwbashclan

io ad esempio sto cercando di imparare ad usare (sono alle primissime armi) le librerie grafiche (vorrei imparare le qt, per adesso ho usato solo zenity........) ed appicicarle su qualche bello script o programmino su shell che mi piace, posso provare a vestire con una gui i vostri script (anche come pacchetto a parte, scriptx-gui).

in questo momento ho creato 2 linee di script con zenity per youtube-dl, un programmino per il download di video da youtube.

Ultima modifica di Chiancheri : 07-11-2009 alle 00:29.
Chiancheri è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2009, 13:53   #5
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1046
Per registrare una finestra di X11 in un filmato AVI usando:
  • xwd - crea uno screenshot dell'intero schermo o una singola finestra di cui si ha l'id numerico
  • xwininfo - fornisce informazioni sulla finestra, in particolare l'id numerico della finestra
  • un comanto usleep creato ad hoc che esegue una sleep per un numero specificato di microsecondi (in fondo a questo post)
  • all'occorenza, un paio di colpi di grep,sed,awk. insomma il copia/incolla del sistemista
  • ImageMagick - il coltellino svizzero per l'elaborazione seriale di immagini
  • Mencoder - il codificatore di filmati fornito con mplayer
ecco lo script:
Codice:
#!/bin/bash
OUTDIR=$(mktemp -d)
TMPFILE=$(mktemp)
echo "Select window to be grabbed"
sleep 3
xwininfo > $TMPFILE
WINID=$(cat $TMPFILE | grep "Window id:" | awk -F "Window id: " '{print $2}' | cut -d " " -f 1)
echo "You selected $WINID"
cat $TMPFILE | grep "$WINID"
echo "Output in $OUTDIR"
echo "Press CTRL-C to stop grab"
for ((n=5;n>0;n--)); do sleep 1 && echo "Starting in $n"; done
rm -f $TMPFILE

cd $OUTDIR
i=0
while ( /bin/true ); do {
NUM=$(printf %04d $i)
i=$((i+1))
usleep 4000
xwd -id $WINID -out mov$NUM.xwd
}
done
eseguendo lo script viene chiesto di cliccare sulla finestra da registrare (il cursore diventa una "croce") e dopo 5 secondi dal click parte la registrazione. Vengono creati tutta una serie di file temporanei di tipo xwd, ciascuno dei quali contiene un frame del filmato. A questo punto possiamo convertirli in jpeg ponendoci nella directory nella quale sono stati generati e usando il seguente comando (per usare convert bisogna aver installato imagemagick)

find mov*.xwd -type f -exec basename '{}' .xwd ';' | xargs -L1 -I{} convert {}.xwd {}.jpg

(occorre un po' di tempo per la conversione, a seconda del numero di frame da convertire)
e incollare le jpg in un unico filmato utilizzando Mencoder (fornito con mplayer)

mencoder "mf://*.jpg" -mf fps=25 -o output.avi -ovc lavc -lavcopts vcodec=mpeg4

et voilà, abbiamo ottenuto il filmato desiderato.
Unica difficoltà riscontrata, ma credo sia un problema legato al programma che stavo utilizzando (DosBox), vi sono dei frame "vuoti" che vengono generati occasionalmente, e vanno eliminati prima di assemblare il filmato. Identificarli è facile, sono i file di dimensione più piccola tra quelli che abbiamo ottenuto, e hanno sempre la stessa dimensione.


usleep.c source code
Codice:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
int stime;
stime=atoi(argv[1]);
usleep(stime);
return 0;
}
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”

Ultima modifica di gurutech : 07-11-2009 alle 14:30.
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2009, 14:56   #6
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1046
Quote:
Originariamente inviato da Gimli[2BV!2B] Guarda i messaggi
Discussione interessante.
interessante si! sai che non conoscevo comm ?
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2009, 19:45   #7
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
Riguardo a quanto proposto da Chiancheri, cavolo, vuoi fare le cose in grande... io non saprei da dove partire .
Intanto vediamo se si accumula un po' di materiale.

Minuscola osservazione per gurutech: perché il nanosleep compilato? sleep 0.004 non funziona bene? Oppure non è ancora disponibile in tutte le distribuzioni?

Ah, anch'io non avevo mai sentito parlare di comm prima di quest'estate
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2009, 22:13   #8
Chiancheri
Senior Member
 
L'Avatar di Chiancheri
 
Iscritto dal: Jan 2006
Città: CATANIA
Messaggi: 2100
Quote:
Originariamente inviato da Gimli[2BV!2B] Guarda i messaggi
Riguardo a quanto proposto da Chiancheri, cavolo, vuoi fare le cose in grande... io non saprei da dove partire .
Intanto vediamo se si accumula un po' di materiale.

Minuscola osservazione per gurutech: perché il nanosleep compilato? sleep 0.004 non funziona bene? Oppure non è ancora disponibile in tutte le distribuzioni?

Ah, anch'io non avevo mai sentito parlare di comm prima di quest'estate
per prima cosa ho aperto intanto il mio repo. Ora voglio creare come primo programma una specie di SDK per caricare in 4 e 4 = 8 ogni script su launchpad, in pochissimi clic, automatizzando le operazioni di make e dput
Chiancheri è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 19:08   #9
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1046
Quote:
Originariamente inviato da Gimli[2BV!2B] Guarda i messaggi
Minuscola osservazione per gurutech: perché il nanosleep compilato? sleep 0.004 non funziona bene? Oppure non è ancora disponibile in tutte le distribuzioni?
perchè se avessi letto la pagina di manuale (come ho fatto ora) avrei scoperto che accetta anche i floating point e non solo gli interi!
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2009, 15:39   #10
flx2000
Bannato
 
L'Avatar di flx2000
 
Iscritto dal: Nov 2002
Città: Roma
Messaggi: 810
Un paio di anni fa ho creato una coppia di script PHP che usano l'applicazione zenity per aggiungere una progress-bar alle operazioni con i file .RAR su GNOME (ad esempio Ubuntu).

Per utilizzare gli script basta aggiungere il primo alle azioni di Nautilus in "Sistema->Preferenze->Configurazione azioni di Nautilus" in modo che lo script sia richiamabile cliccando col tasto destro del mouse su un file o su una directory, e mettere il secondo in una qualsiasi directory nel PATH.

rarmax-action.php :
Codice:
#!/usr/local/bin/php
<?PHP

/**
 * rarmax-action v1.0
 * by Fabio "FLX" Addari
 *
 * Script che dà un apporto grafico alla compressione dei file rar
 *
**/

if ( count($argv) < 4 )
{
	$x=`zenity --warning --text="Nessun file selezionato" --title="rarmax: avviso"`;
	exit;
}

$elems = array();

reset($argv);
list(,) = each($argv); // salta il nome dello script
list(,$dir) = each($argv);
list(,) = each($argv); // salta il primo file perché viene ripetuto
while ( list(,$elem) = each($argv) )
{
	$elems[] = $elem;
}

$workdirfile = ( count($elems) == 1 ) ? $elems[0] : basename($dir);
$workdirfile .= ".rar";

while ( true )
{
	$archivio = `zenity --entry --entry-text="{$workdirfile}" --text="Nome dell'archivio" --title="rarmax: archiv
io"`;
	$archivio = trim($archivio);
	
	if ( empty($archivio) )
	{
		exit;
	}
	elseif ( substr($archivio,0,1) != "." )
	{
		break;
	}
	
	$x = `zenity --warning --text="Nome del file non valido" --title="rarmax: avviso"`;
}

if ( strripos($archivio,".rar") !== (strlen($archivio) - 4) )
{
	$archivio .= ".rar";
}

if ( file_exists("{$dir}/{$archivio}") )
{
	$x = `zenity --question --title="rarmax: avviso" --text="Sovrascrivere {$archivio}?" && echo s`;
	if ( strpos($x,"s") === false )
	{
		$x = `zenity --info --text="Operazione annullata" --title="rarmax: avviso"`;
		exit;
	}
}

$tmpfile = tempnam("/tmp","~rarmax-");

$tmp = fopen($tmpfile,"w");
foreach ( $elems as $elem )
{
	fputs($tmp,"\"{$elem}\"\n");
}
fclose($tmp);

$x = `cd "$dir";rar a -m5 -md4096 -r -s "{$archivio}" @{$tmpfile} | rarmax-parse.php | zenity --progress --percentage
=0 --text="Compressione di {$archivio} in corso..." --title="rarmax: compressione" --auto-close`;

unlink($tmpfile);

?>
rarmax-parse.php :
Codice:
#!/usr/local/bin/php
<?PHP

/**
 * rarmax-parse.php
 *
 * Versione 1.0 by Fabio "FLX" Addari
 *
 * Questo script riceve in ingresso l'output del comando rar e pone in
 * uscita la percentuale di completamento, da 0 a 100.
**/

$input = fopen("php://stdin","r");
$output = fopen("php://stdout","w");

$x = "";
$waiting = false;
$prec = 0;
while ( !feof($input) )
{
	$c = fgets($input,8);
	$x .= $c;
	
	if ( strpos($c,chr(8)) !== false )
	{
		//fputs($output,"Letto: '{$x}'\n");
		
		$put = preg_replace("/[^0-9]/","",$x);
		
		if ( $put > 100 )
		{
			$put = 0;
		}
		
		if ( $waiting )
		{
			if ( $prec > 0 )
			{
				$put = $prec.$put;
			}
			$waiting = false;
		}
		elseif ( $put > 0 && $put < $prec )
		{
			$waiting = true;
			$prec = $put;
			$x = "";
			continue;
		}
		
		if ( !empty($put) )
		{
			fputs($output,"{$put}\n");
		}
		
		$x = "";
		$prec = $put;
	}
}

fclose($output);
fclose($input);

?>

Ultima modifica di flx2000 : 09-11-2009 alle 15:44.
flx2000 è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2009, 10:42   #11
masand
Moderatore
 
L'Avatar di masand
 
Iscritto dal: Feb 2003
Città: Anagni/Firenze
Messaggi: 9113
Ottimo Topic.

Ma per farlo diventare ufficiale manca qualche informazione:
  • Cosa è lo scripting?
  • Cosa posso farci con lo scripting?
  • Introduzione allo scripting su e/o sistemi alternativi
  • Linguaggi subito disponibili sulle distribuzioni

Dopodiché sarebbe ottimo, anche se chi posta i propri script possa anche spiegare (o riga per riga o in generale) il funzionamento e come usarlo.

Un saluto a tutti...
masand
masand è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2009, 10:49   #12
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1046
Quote:
Originariamente inviato da masand Guarda i messaggi
Ottimo Topic.

Ma per farlo diventare ufficiale manca qualche informazione:
  • Cosa è lo scripting?
  • Cosa posso farci con lo scripting?
  • Introduzione allo scripting su e/o sistemi alternativi
  • Linguaggi subito disponibili sulle distribuzioni

Dopodiché sarebbe ottimo, anche se chi posta i propri script possa anche spiegare (o riga per riga o in generale) il funzionamento e come usarlo.

Un saluto a tutti...
masand
ok scrivo io una intro
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2009, 03:48   #13
Chiancheri
Senior Member
 
L'Avatar di Chiancheri
 
Iscritto dal: Jan 2006
Città: CATANIA
Messaggi: 2100
SALVEEEEE!!!


ho creato uno script (e l'ho pacchettizzato e hostato su launchpad DA SE), il quale ti fa le seguenti domande:

1) nome del programma

2) descrizione

3) nome del tuo repository

4) seleziona cartella di lavoro

5) seleziona script (coi permessi già dati)

6) seleziona icona .png

7) immetti la versione del programma a cui sei giunto

8) immetti le dipendenze

9) immetti la categoria




E VOILA'


carica tutto sul repository di launchpad e lo rende disponibile a tutti!!!!!!


con tanto di icona e di programma visibile nel menu di gnome!!


ottimo per programmi che abbiano un minimo di gui!



al momento ho creato la versione BASE poi voglio migliorarla un pò (se mi aiutate è meglio)

per aggiungere il mio repository (su karmic)

sudo apt-add-repository ppa:ing.gonzo

(https://launchpad.net/~ing.gonzo/+archive/ppa)

il programma si chiama ugbu

N.B.

sempre se uno ha già un account attivo e configurato su launchpad, con tanto di chiave registrata e tutto.
Chiancheri è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2009, 14:05   #14
Chiancheri
Senior Member
 
L'Avatar di Chiancheri
 
Iscritto dal: Jan 2006
Città: CATANIA
Messaggi: 2100
adesso che abbiamo un programmino che pacchettizza e condivide su launchpad gli script, perchè (alcuni) non li carichiamo su launchpad? mettetegli zenity per inserire i dati (fa schifo ma è già una gui di dialog) e ci facciamo un repository comene,

CHE NE DITE???
Chiancheri è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2009, 11:32   #15
masand
Moderatore
 
L'Avatar di masand
 
Iscritto dal: Feb 2003
Città: Anagni/Firenze
Messaggi: 9113
Spostato nelle Discussioni Ufficiali.

Mi scuso per il ritardo
masand è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2010, 19:30   #16
FagioloOne
Member
 
L'Avatar di FagioloOne
 
Iscritto dal: Sep 2005
Città: Venezia
Messaggi: 160
Ho una domanda a proposito delle variabili nella shell, se qualcuno potrebbe aiutarmi gli sarei immensamente grato.

Il problema e' il seguente:

Ho due stringhe str1 e str2

Vorrei che la stringa str1str2 fosse vista come una variabile dal shell, grazie.

Esempio variabile CASAMIA

str1 = CASA
str2 = MIA

str1str2 eviquivalere alla variabile CASAMIA.

grazie di tutte le risposte.
FagioloOne è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2010, 19:53   #17
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
Non sono certo di aver capito al 100%, soprattutto per l'assenza di un frammento di codice esplicativo.

Un'idea comunque me la sono fatta, vuoi richiamare una variabile il cui nome è contenuto in un'altra (o più) variabili?
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2010, 08:57   #18
FagioloOne
Member
 
L'Avatar di FagioloOne
 
Iscritto dal: Sep 2005
Città: Venezia
Messaggi: 160
Grazie dell'aiuto era esattamente quello che stavo cercando ma il problema e' il mio script non puo' essere scritto in bash e quindi la soluzione trovata non posso utilizzarla.
Ho usato percorso altre vie.

Grazie dell'aiuto.
FagioloOne è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2010, 00:40   #19
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
Riporto un paio di link a discussioni recenti sull'argomento script.
Qualche giorno fa ho anche aggiornato il downloader "Alle otto della sera", progettino che mi ha dato molti spunti per sperimentare con espressioni regolari, ridirezioni stream e qualche tentativo di gestione degli errori un po' "avanzato".
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2011, 20:43   #20
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3008
Backup di database MySQL
Parametri da linea di comando:
  • all -> esegue il backup dei database elencati da "SHOW DATABASES"
  • "nome_db1 nome_db2 nome_dbN" -> esegue il backup dei soli database specificati
Variabili personalizzabili:
  • /etc/FILE_ACCESSO -> file contenente i dati di accesso al/ai datanase da salvare: USR e PWD
  • MAX_BACKUPS -> Numero di backup da mantenere
  • SKIP -> Database da NON salvare
  • DEST -> Cartella di destinazione backup: al suo interno verrà creata una cartella apposita
  • MBD -> Cartella da creare all'interno della cartella di destinazione
  • RIGHTS_DIR -> Diritti ottali da assegnare a directory di backup
  • RIGHTS_TAR -> Diritti ottali da assegnare ad ogni file gz creato
Codice:
#!/bin/bash
# Backup MySql databases
# --------------------------------------------------------------------
# This is a free shell script under GNU GPL version 2.0 or above
# Copyright (C) 2004, 2005 nixCraft project
# Feedback/comment/suggestions : http://cyberciti.biz/fb/
# -------------------------------------------------------------------------
# Copyleft (C) 2011-2012 Gimli
# -------------------------------------------------------------------------
# 20110922 - v1.0
# 20110923 - v2.0
# 20120716 - v3.0
# 20120717 - v3.1
# 20120718 - v3.2
# -------------------------------------------------------------------------

# Inclusione per prima: precedenza a parametri impostati in questo script
. /etc/FILE_ACCESSO

###########################################################################
# ------------------------------------------------------------------------#
# Impostazioni personalizzabili - inizio
#
# Numero di backup da mantenere
MAX_BACKUPS=30

# Nome host server MySQL (opzione -h mysqldump)
MyHOST="localhost"

# Database da NON BACKUPPARE
SKIP=""

# Cartella di destinazione backup: al suo interno verrà creata una cartella
# apposita
DEST="/home/gimli/backup"

# Cartella da creare all'interno della cartella di destinazione
# (poò anche essere uguale DEST: i diritti non saranno modificati)
MBD="$DEST/mysql"

# Diritti ottali da assegnare a directory di backup
RIGHTS_DIR="0700"
# Diritti ottali da assegnare ad ogni file gz creato
RIGHTS_TAR="0600"
#
# Impostazioni personalizzabili - fine
# ------------------------------------------------------------------------#
###########################################################################

###########################################################################
# ------------------------------------------------------------------------#
# Percorsi assoluti binari utilizzati (importanti per crontab)
#
# mysql usato per 'SHOW DATABASES'
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
#COMPRESSOR="$(which gzip)"; EXTENSION="gz"
COMPRESSOR="$(which bzip2)"; EXTENSION="bz2"
#COMPRESSOR="$(which xz)"; EXTENSION="xz"
SED="$(which sed)"
HOSTNAME="$(which hostname)"
#
# Percorsi assoluti binari utilizzati - fine
# ------------------------------------------------------------------------#
###########################################################################

usage()
{
cat << EOF
utilizzo: $0 opzioni

Questo script esegue backup di database mysql.
Specificare una delle seguenti azioni:
  all                 : backup dei database elencati da "SHOW DATABASES"
  like '%condizione%' : backup dei database che soddisfano la condizione.
  test '%condizione%' : mostra i database che soddisfano la condizione.
  "nome_db1 nome_db2 nome_dbN" : backup dei soli database specificati.

EOF
}

# Lista di database
TEST=0
if [ "$1" == "test" ]; then
  TEST=1
fi
DBS=$(if [ -z "$1" ]; then
    :
  elif [ "$1" == "all" ]; then
    echo 'show databases' | $MYSQL -u $USR -h $MyHOST --password="$PWD" -Bs
  elif [ "$1" == "like" ]; then
    echo "SHOW DATABASES LIKE '$2'" | $MYSQL -u $USR -h $MyHOST --password="$PWD" -Bs
  elif [ "$1" == "test" ]; then
    echo "SHOW DATABASES LIKE '$2'" | $MYSQL -u $USR -h $MyHOST --password="$PWD" -Bs
  else
    echo "$1"
  fi)

if [ -z "$DBS" ]; then
  echo "Nessun database selezionato!"
  usage
  exit 1
fi

if [[ TEST -eq 1 ]]; then
  for db in $DBS ; do
    skipdb=0
    if [ "$SKIP" != "" ] ; then
      for i in $SKIP ; do
        [ "$db" == "$i" ] && skipdb=1 || :
      done
    fi

    if [[ $skipdb -eq 0 ]] ; then
      echo $db
    fi
  done
  exit 0
fi

# Creazione cartella destinazione e impostazione diritti
[ ! -d $MBD ] && mkdir -p $MBD || :
if [ "$MBD" != "$DEST" ]; then
  # owner root
  $CHOWN 0.0 -R $MBD
  # Applica diritti
  $CHMOD $RIGHTS_DIR $MBD
fi

# hostname: utilizzato in nome file
HOST="$($HOSTNAME)"
# data: utilizzata in nome file
NOW="$(date +"%Y-%m-%d_%H.%M")"

for db in $DBS ; do
  skipdb=0
  if [ "$SKIP" != "" ] ; then
    for i in $SKIP ; do
      [ "$db" == "$i" ] && skipdb=1 || :
    done
  fi

  if [[ $skipdb -eq 0 ]] ; then
    # Inizio nome file per conta (paranoia spazi)
    FILE_PREFIX="$(echo "$MBD/$db.$HOST" | tr -d [:blank:])"
    # Nome nuovo backup (paranoia spazi)
    FILE="$(echo "$FILE_PREFIX.$NOW.sql.$EXTENSION" | tr -d [:blank:])"
    # Elenco backup precedenti (paranoia rimozione spazi, poi testo esistenza file)
    FILE_PREV=( $(ls "$FILE_PREFIX"*.sql.* 2>/dev/null | tr -d [:blank:]) )
    # Mantengo solo gli ultimi $MAX_BACKUPS - 1 (a cui si sommerà il nuovo)
    if (( ${#FILE_PREV[@]} > (($MAX_BACKUPS - 1)) )) ; then
      let "NUM_DEL=${#FILE_PREV[@]} - $MAX_BACKUPS + 1"
      for (( ; NUM_DEL > 0; NUM_DEL-- )) ; do
        if [ -f "${FILE_PREV[$NUM_DEL]}" ] ; then
          rm "${FILE_PREV[$NUM_DEL]}"
        fi
      done
    fi

    ERROR_MESSAGE=$( {
      $MYSQLDUMP --add-drop-database --quick -c -e -F -l -u $USR -h $MyHOST --password="$PWD" --databases $db | \
          $SED -e 's|/\*\!40000 DROP DATABASE IF EXISTS \(`.*`\)\*/;|DROP DATABASE IF EXISTS \1;|' | \
          $COMPRESSOR > "$FILE" ;
      if [[ ${PIPESTATUS[0]} -ne 0 ]] ; then
        exit 1
      elif [[ ${PIPESTATUS[1]} -ne 0 ]] ; then
        exit 2
      elif [[ ${PIPESTATUS[2]} -ne 0 ]] ; then
        exit 3
      fi
      exit 0
    } 2>&1 )
    RETURN=$?

    if [[ $RETURN -ne 0 ]] ; then
      if [ -f "$FILE" ] ; then
        rm "$FILE"
      fi
      # mysqldump o gzip fallito!
      FILE="$MBD/_FAILED.$db.$HOST.$NOW.FAILED_.txt"
      touch "$FILE"
      echo "$ERROR_MESSAGE" > "$FILE"
    fi
    # Applica diritti al file
    $CHMOD $RIGHTS_TAR "$FILE"
  fi
done
Avete suggerimenti per semplificare i vari salti mortali che ho utilizzato per intercettare valore di ritorno e messaggi di errore di mysqldump e gzip?
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)

Ultima modifica di Gimli[2BV!2B] : 18-07-2012 alle 23:41. Motivo: Aggiornamento e correzioni
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Apple MacBook Air M3: chi deve davvero comprarlo? La recensione Apple MacBook Air M3: chi deve davvero comprarlo...
ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ultrawide si fondono ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ul...
Dreame L10s Pro Ultra Heat: la pulizia di casa tutta sostanza Dreame L10s Pro Ultra Heat: la pulizia di casa t...
HONOR Magic6 Pro: come funziona Magic Portal, il modo ''intelligente'' di condividere HONOR Magic6 Pro: come funziona Magic Portal, il...
L'innovazione richiede fiducia: Workday si propone come guida nell'era dell'IA L'innovazione richiede fiducia: Workday si propo...
Accordo di intesa firmato, saranno di SK...
iPhone, il supporto alla messaggistica R...
Una GeForce RTX 3080 a meno di 800 euro ...
Ecco le migliori offerte sui processori ...
Polestar presenta Polestar Charge, il se...
PyPI bersagli di un attacco malware: reg...
Putin ha chiesto al governo russo di pen...
Un display AMOLED curvo su un dissipator...
Speciale sedie da ufficio e gaming in of...
Aggiornamenti per Sony Alpha 1, Alpha 9 ...
Questa stampante Canon PIXMA TR4750i a c...
Grok-1.5, l'IA di Elon Musk diventa molt...
Nuovo obiettivo Tamron 28-75mm F/2.8 Di ...
Consegne trimestrali Tesla, gli analisti...
WordPad verrà eliminato già...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:13.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Served by www3v