- Home
- Categorie
- Gaming, Hardware e Software
- Software (Windows - Linux - Apple) & Applicazioni
- Generatore programmi - Progetto ambiente sviluppo software programmazione assistita
-
Generatore programmi - Progetto ambiente sviluppo software programmazione assistita
Scopo del progetto e' realizzare un ambiente di sviluppo per la programmazione assistita in ambiente Shell ( testato su UBUNTU 8 ) che consenta di creare in automatico script strutturati, dotati di opportuni permessi e annotazioni, con inserite opportune funzioni standardizzate selezionate da una raccolta, che ognuno di voi potra' contribuire ad ampliare.
Una prima raccolta la trovate nel file allegato "funzioni.zip" da copiare sulla vostra Scrivania (Desktop) unitamente al seguente file "ZIDE1.sh" attribuendogli come al solito i permessi di esecuzione con il comando da Shell:
$ sudo chmod +x Scrivania/ZIDE1.sh.Per scaricare "funzioni.zip" andare su rapidshare.com/files/160813250/funzioni.zip.html
La prima volta che si lancia ZIDE1.sh viene creata nella nostra Home la dir principale "programmazione" con le sue subdir "A_NOTE" e "A_FUNZIONI".
In "programmazione" troveremo la voce per la creazione di "Nuovo_script" e la raccolta dei nostri script su cui potremo effettuare:
Backup_file
Eseguo_file
Edito_file
Rename_file
Cancello_file
In "A_FUNZIONI" troveremo la voce per la creazione di "Nuova_funzione" e la raccolta delle funzioni su cui potremo effettuare:
Edito_file
Rename_file
Cancello_file
In "A_NOTE" troveremo:
il messaggio di Copyright
la copia della GNU GENERAL PUBLIC LICENSE
l'output di man zenity
alcune icone
e dove potremo depositare i nostri appunti di programmazione, le pagine WEB e le immagini di nostro interesse;
cliccando su uno dei file contenuti in questa dir lo visualizzeremo e/o modificheremo tramite il nostro editor oppure lo visualizzeremo direttamente nel nostro Browser.Scegliendo creazione di "Nuovo_script" si aprira' una finestra scrollabile con le prime 5 righe di spiegazione di ogni funzione presente in "A_FUNZIONI" in modo da poter scegliere consapevolmente quelle che ci servono dalla lista "Aggiungi Funzioni" che apparira' dopo e sara' creato il nuovo script col nome da noi scelto ( per esempio ultima_prova.sh ) che sara' visualizzato nel nostro editor per la modifica:
#!/bin/bashScript ultima_prova.sh
creato martedì-04-novembre-2008 da alberto con ZIDE1.sh
#------------ Descrizione Script------------------
#------------------variabili globali---------------
utente="alberto"
oggi="martedì-04-novembre-2008"
pass=""
nome_script="ultima_prova.sh"#-----------------------Funzioni-------------------
#----------------Funzione avviso
chiamare con "testo messaggio" da
visualizzare in una finestra a video
scritta domenica-02-novembre-2008 da xymaster
.... tutte le altre funzioni scelte
main () {
#Funzione principale
exit
}
#--------------Start--------------main
Scegliendo creazione di "Nuova_funzione" sara' creata la nuova funzione col nome da noi scelto (per es. prova) che sara' visualizzato nel nostro editor per la modifica:
#---------- Funzione provainserire descrizione funzione, parametri
scritta martedì-04-novembre-2008 da alberto
function prova () {
}
Alla chiusura, ZIDE1.sh chiedera' se si vuole effettuare un backup sincronizzato del nostro ambiente di sviluppo.
Sperando di non avervi annoiato con questa lunga, ma non esaustiva spiegazione, resto in attesa di vostri commenti e contributi e passo al codice di ZIDE1.sh
#!/bin/bash #"--------variabili globali-------- lista="" pass="" editor="" new_script="" utente=$(whoami) oggi="`date +%A-%d-%B-%Y`" if [ "$utente" = "root" ];then clear nome_script="`basename $0`" echo "Rilanciare $0 come utente normale e non come 'root'. Battere un tasto" read exit fi flag_doc_funzioni=true #se true visualizza documentazione Funzioni #definiamo directory dei nostri script e la sub-directory per i nostri appunti #per la dir principale scegliamo my_dir="programmazione" la subdir scegliamo A_NOTE my_subdir="A_NOTE" la il contenitore delle nostre funzioni scegliamo la directory A_FUNZIONI my_function="A_FUNZIONI" directory di backup my_backup="_bckup" #------------Funzioni------------ function avviso () { #chiamare con testo messaggio zenity --info --window-icon="$my_subdir/Italy.png" --text="$1" } function crea_dir () { con pathname directory da creare mkdir $1>|/tmp/prv.$$ 2>&1 gest_err "Creazione $1" chmod -R 755 $1 chown $utente:$utente $1 } function crea_file () { con pathname file da creare touch "$1" chmod 755 "$1" chown $utente:$utente $1 } function data_modifica () { #restituisce nella variabile interna $REPLY nome script, data ed ora sua ultima modifica nome_script="`basename $0`" stat $0 | grep Modify | cut -f2 -d" " > /tmp/prv.data ora=`stat $0 | grep Modify | cut -f3 -d" " | cut -c-8` gg=`cat /tmp/prv.data | cut -c9-10` mm=`cat /tmp/prv.data | cut -c6-7` aaaa=`cat /tmp/prv.data | cut -c1-4` rm -f /tmp/prv.data REPLY=$(echo "Script $nome_script\nUltima modifica $gg/$mm/$aaaa $ora\n") } function get_password () { pass=`zenity --entry --hide-text --text="immetti la password di $utente:"` #azzera il timestamp di sudo (quello che vi consente di non digitare la password se ripetete sudo entro tot tempo) sudo -k #cancella completamente il timestamp sudo -K echo "$pass" | sudo -S ls > /dev/null if [ $? != 0 ];then avviso "Password errata. Termino lo script" exit fi } my_help () { #selezioniamo l'editor da usare a seconda che si tratti di una Kubuntu o di una Ubuntu editor=`which kedit` || editor=`which gedit` my_dir="/home/$utente/$my_dir" my_subdir="$my_dir/$my_subdir" my_backup="$my_dir$my_backup" my_function="$my_dir/$my_function" data_modifica msg_licenza=`cat $my_subdir/copyright` msg_help="$REPLY\n $msg_licenza" if domanda "$msg_help";then zenity --text-info --title="Licenza GNU" --height=400 --width=600 --filename $my_subdir/licenza.txt fi #utente=$(pwd | cut -f3 -d'/') clear get_password if test ! -e $my_dir ;then crea_dir "$my_dir" fi if test ! -e $my_subdir ;then crea_dir "$my_subdir" man zenity > $my_subdir/Man_Zenity fi if test ! -e $my_function ;then crea_dir "$my_function" cd $my_function unzip /home/$utente/Scrivania/funzioni.zip mv *.png $my_subdir/ mv copyright $my_subdir/ mv licenza.txt $my_subdir/ cd fi } gest_err (){ con nome operazione da controllare #esempio: gest_err "Cancellazione" restituisce Cancellazione OK opppure elenco di errori in nuova finestra if [ $? != 0 ] then gdialog --title "Visualizza Errori" --textbox /tmp/prv.$$ 22 72 elif [ $# = 1 ];then avviso "$1 OK" fi rm -rf /tmp/prv.$$ 2> /dev/null } domanda () { con testo domanda finestra con testo domanda con bottoni Ok per rispondere si o annulla per rifiutare zenity --question --text "$1" return $? } rename_file () { # chiamare con pathname completo del file da rinominare # chiede nuovo nome e restituisce messaggio risultato operazione local dir_file="$(dirname "$1")" local old_name="$(basename "$1")" local new_name="" if new_name=`zenity --entry --width=300 --title="Rename file" --text="Inserisci il nome del nuovo file" --entry-text="$old_name"`;then ##accetta solo caratteri alfanumerici _ - e .i nel nome file.Cambia gli altri con carattere _ new_name=`echo "$new_name" | sed "s/[^a-zA-Z0-9_-.]/_/g"` if [ -e "$dir_file/$new_name" ];then avviso "Il nome richiesto, \"$new_name\" e\` gia\` assegnato a un documento esistente" else if mv -f "$1" "$dir_file/$new_name";then avviso "$old_name cambiato in $new_name" else avviso "$old_name NON CAMBIATO!" fi fi else avviso "Errore nella funzione" fi } function backup_dir (){ # effettua backup sincronizzato Directory "$my_dir" in "$my_backup" # consente installazione rsync e gestisce errori tramite funzione gest_err sincronizza=`which rsync` if [ "$sincronizza" = "" ];then if domanda "rsync non presente. Vuoi Installarlo ?";then echo "$pass" | sudo -S apt-get install rsync >|/tmp/prv.$$ 2>&1 gest_err "Installazione rsync" else avviso "Backup $my_dir ANNULLATO!" return fi fi if test ! -e $my_backup ;then crea_dir "$my_backup" fi echo "$pass" | sudo -S rsync -av --exclude='*~' --delete --force $my_dir $my_backup>|/tmp/prv.$$ 2>&1 # | zenity --progress percentage=0 --title ?Backup $my_dir in corso? gest_err "Backup $my_dir" } function select_run_file (){ principale my_help while true; do clear forma_lista "$my_dir" lista="Nuovo_script $lista" if menu=` zenity --title "Selezione Script/directory" --list --column="elenco Script" $lista `;then if [ -d "$my_dir/$menu" ];then avviso "$menu e' una directory, la apro" if [ "$my_dir/$menu" = "$my_function" ];then crea_function $my_dir/$menu else apri_dir "$my_dir/$menu" fi else if [ -f "$my_dir/$menu" ];then if submenu=` zenity --title "Operazioni su file" --list --column="lista opzioni" Backup_file Eseguo_file Edito_file Rename_file Cancello_file`;then case $submenu in Backup_file)cp "$my_dir/$menu" "$my_dir/$menu.bckp">|/tmp/prv.$$ 2>&1;gest_err "Backup";; Eseguo_file) if [ -x "$my_dir/$menu" ];then echo "$pass" | sudo -S $my_dir/$menu>|/tmp/prv.$$ 2>&1;gest_err else avviso "$menu non e' un file seguibile. Lo Edito" $editor $my_dir/$menu>|/tmp/prv.$$ 2>&1;gest_err fi;; Edito_file)$editor $my_dir/$menu>|/tmp/prv.$$ 2>&1;gest_err;; Rename_file)rename_file "$my_dir/$menu";; Cancello_file) if domanda "Vuoi cancellare il file \"$menu\"?";then rm -f "$my_dir/$menu">|/tmp/prv.$$ 2>&1;gest_err "Cancellazione" rm -f "$my_dir/$menu~" 2>&1;gest_err fi;; *)break;; esac fi elif [ "$menu" = "Nuovo_script" ];then if new_script=`zenity --entry --width=300 --title="Nuovo Script" --text="Inserisci il nome del nuovo script"`;then ##accetta solo caratteri alfanumerici _ - e . nel nome file.Cambia gli altri con carattere _ new_script=`echo "$new_script" | sed "s/[^a-zA-Z0-9_-.]/_/g"` if [ -e "$my_dir/$new_script" ];then avviso "Il nome richiesto, \"$new_script\" e\` gia\` assegnato a un documento esistente." continue fi nuovo_script "$my_dir/$new_script" fi fi fi else break fi done if domanda "Vuoi effettuare il backup sincronizzato di $my_dir?";then backup_dir fi return } function nuovo_script () { con "$my_dir/$new_script" rm -f $my_function/*~ forma_lista "$my_function" #lista="AA_Descrizione_Funzioni $lista" # echo "${lista[@]}" visualizza tutti gli elementi dell'array elenco elenco="" if $flag_doc_funzioni;then echo "-----------------Documentazione Funzioni------------------" > /tmp/prv.$$ for n in `echo "${lista[@]}"`;do sed -n -e "1,5p" $my_function/$n >> /tmp/prv.$$ i=`echo "false $n "` if [ "$n" = "avviso" -o "$n" = "domanda" ];then continue fi elenco+=$i done gdialog --clear --title "Documentazione FUNZIONI" --textbox "/tmp/prv.$$" 50 50 rm -f /tmp/prv.$$ fi new_script=`basename $1` if menu=`zenity --title "Aggiungi Funzioni a $new_script" --list --checklist --multiple --column="clicca " --column="Funzione scelta" --separator " " $elenco`;then copyright=false echo "-----------------Documentazione Funzioni------------------" > /tmp/prv.$$ sed -n -e "1,5p" $my_function/avviso >> /tmp/prv.$$ sed -n -e "1,5p" $my_function/domanda >> /tmp/prv.$$ for n in `echo "${menu[@]}"`;do sed -n -e "1,5p" $my_function/$n >> /tmp/prv.$$ if [ "$n" = "copyright1" ];then copyright=true fi done if domanda "Vuoi procedere con la creazione di $new_script?";then crea_file "$1" echo "#!/bin/bash" >> $1 echo -n "# Script ">> $1 echo -n $(basename $new_script)>> $1 echo -en "\n# creato ">> $1 echo "$oggi da $utente con ZIDE1.sh">> $1 echo -e "#------------ Descrizione Script------------------">> $1 echo -e "# #">> $1 echo -e "# #">> $1 echo -e "#------------------variabili globali---------------\n">> $1 echo -e "utente=\"$utente\"">> $1 echo -e "oggi=\"$oggi\"\npass=\"\"">> $1 echo -e "nome_script=\"`basename \$new_script`\"\n\n">> $1 echo -e "#-----------------------Funzioni-------------------\n" >> $1 cat $my_function/avviso >> $1 cat $my_function/domanda >> $1 splash=false for n in `echo "${menu[@]}"`;do if [ "$n" = "AA_Descrizione_Funzioni" -o "$n" = "avviso" -o "$n" = "domanda" ];then continue else cat $my_function/$n >> $1 fi if [ "$n" = "splash" ];then splash=true fi done if $splash;then echo -e "main () {\n#Funzione principale\nsplash\nexit\n}" >> $1 else echo -e "main () {\n#Funzione principale\nexit\n}" >> $1 fi echo -e "#--------------Start--------------\n" >> $1 if $copyright;then echo -e "copyright1\n" >> $1 fi echo -e "main\n" >> $1 `$editor $my_dir/$new_script` 2> /dev/null fi fi } function forma_lista (){ lista=`ls "$1" | sort -u` } function crea_function () { while true; do forma_lista "$1" lista="Nuova_funzione $lista" clear if menu=` zenity --title "Selezione FUNZIONI" --list --column="elenco funzioni" $lista `;then if [ "$menu" = "Nuova_funzione" ];then if new_script=`zenity --entry --width=300 --title="Nuova Funzione" --text="Inserisci il nome della funzione"`;then ##accetta solo caratteri alfanumerici _ - e .i nel nome file.Cambia gli altri con carattere _ new_script=`echo "$new_script" | sed "s/[^a-zA-Z0-9_-.]/_/g"` if [ -e "$my_function/$new_script" ];then avviso "Il nome richiesto, \"$new_script\" e\` gia\` assegnato a un documento esistente." #break continue fi crea_file "$my_function/$new_script" echo -e "#---------- Funzione $new_script">> $my_function/$new_script echo -e "# inserire descrizione funzione, parametri #">> $my_function/$new_script echo -e "# ">> $my_function/$new_script echo -e "# ">> $my_function/$new_script echo -e "# ">> $my_function/$new_script echo -e "# scritta $oggi da $utente">> $my_function/$new_script echo -e "function $new_script () {\n\n}\n" >> $my_function/$new_script `$editor $my_function/$new_script` 2> /dev/null fi else if submenu=` zenity --title "Operazioni su file" --list --column="lista opzioni" Edito_file Rename_file Cancello_file`;then case $submenu in Edito_file)$editor $1/$menu>|/tmp/prv.$$ 2>&1;gest_err;; Rename_file)rename_file "$1/$menu";; Cancello_file) if domanda "Vuoi cancellare il file \"$menu\"?";then rm -f "$1/$menu">|/tmp/prv.$$ 2>&1;gest_err "Cancellazione" rm -f "$1/$menu~" 2>&1;gest_err fi;; *)break;; esac fi fi else break fi done avviso "Rientro alla directory principale" } function apri_dir (){ forma_lista "$1" while true; do clear if menu=` zenity --title "Selezione file" --list --column="elenco files" $lista `;then if [ -d "$1/$menu" ];then avviso "$menu e' una directory, la apro" apri_dir "$1/$menu" break fi estensione=${menu##*.} if [ "$estensione" = "html" -o "$estensione" = "htm" -o "$estensione" = "gif" -o "$estensione" = "png" -o "$estensione" = "jpg" ];then x-www-browser "$1/$menu" 2> /dev/null else `$editor $1/$menu` 2> /dev/null fi else break fi done avviso "Rientro alla directory principale" } #--------------Start-------------- select_run_file #--------------Stop---------------