Lo scripting ben temperato Ing. Davide Bolcioni Consulente Sistemi Informativi Ovvero un tocco di eleganza nella programmazione della shell.

Slides:



Advertisements
Presentazioni simili
Shell: variabili di sistema PATH HOME USER PWD SHELL HOSTNAME HOSTTYPE Per visualizzare il valore di tutte le variabili dambiente si usa il comando set.
Advertisements

Shell Scripting. Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure contenuti.
Andrea Colombari, Carlo Drioli e Barbara Oliboni
La shell di Linux Linux ha una varietà di shell differenti:
Shell: variabili di sistema PATH HOME USER PWD SHELL HOSTNAME … Per visualizzare il valore di tutte le variabili dambiente si usa il comando set.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX La shell Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX La shell Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Linguaggi di programmazione: funzioni Le funzioni richiedono un numero fisso o variabile di argomenti, ovvero valori che devono essere passati alla funzione.
Sistemi Operativi – La shell Salvatore Campagna Politecnico di Torino Dipartimento di Automatica.
Programmazione della shell pt.2
Script di shell (bash).
1 PROGRAMMAZIONE IN SHELL The Unix Programming Environment Kernigham - Pike.
Il sistema Linux: principi di progettazione
Ancora sulla shell. Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure.
Ancora sulla shell. Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure.
Corso di Laboratorio primo modulo Introduzione all'uso di un sistema operativo. Introduzione all'uso della shell (bash). Java – –Introduzione – –Tipi di.
Il sistema operativo UNIX Presentazione realizzata da: Deri Claudio,Granata Luca,Brunetti Enrico.
Script bash I file di comandi in Linux. BASH  Bourne Again Shell  Modalità interattiva o batch (file di comandi)  Ambiente di programmazione “completo”
Eugenia Franzoni Il software libero Catnic Srl. Si può comprare un software?
CORSO AUTOGESTITO DI GNU/LINUX Riprendi in mano il TUO sistema Riprendi in mano il TUO futuro BASH SCRIPTING.
1 © F. Pedullà, M. VerolaAA Programmazione in linguaggio script LSO1 Modulo 3: Programmazione in linguaggio script Laboratorio di Sistemi.
Automatizzar e con Perl e Bash LinuxDay 2007 Torino Cascina Roccafranca Francesco Golia e Igor Pesando.
Parte 2 Programmare in Matlab – I Sommario: Introduzione: m-file Strutture condizionali e cicli –Istruzione “if” + Operatori logici in MatlabIstruzione.
1 Alberto Pollastro, !#/bin/bash Novara, GalLUG - Gruppo Utenti Linux Galliate - #!/bin/bash Alberto Pollastro.
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
1 © F. Pedullà, M. VerolaAA Programmazione in linguaggio script LSO1 Modulo 2 – Appendice 4 Programmazione in linguaggio script Laboratorio.
1 Amministrazione di base del sistema Cristina Moretto Corso Base LinuxTrent
INFORMATICA ALGORITMI, PROGRAMMI, E LINGUAGGI DI PROGRAMMAZIONE.
Amministrazione di reti di calcolatori - Massimo Bertozzi Shell e scripting.
PGDay 2009 FSGateway Ing. Torello Querci Resp. Architetture SW - Negens S.r.l. 4 Dicembre 2009, Pisa.
Ambienti di Programmazione per il Software di Base
© 2007 SEI-Società Editrice Internazionale, Apogeo
Coding unplugged e con il PC nella scuola primaria
I/O redirection AND PIPES
Cosa succede quando premi invio
PROGRAMMAZIONE SHELL -
Terza Lezione → Navigare nel file System → parte 2
Script Marco D. Santambrogio –
PROGRAMMAZIONE BASH - INTRODUZIONE
IL CONCETTO DI ALGORITMO
Milestones 2002 fine febbraio 2002 a. primi test di Grid per Virgo
Seconda lezione → Navigare nel File System
I comandi.
Statistiche 27/05/2008.
Modulo 2 - Sezione A Programmazione in linguaggio script
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Massa Marittima Federico Batini
PROGRAMMAZIONE BASH – ISTRUZIONE IF
Tipi di Shell sh – Bourne shell csh – C shell ksh – Korn shell
Programmare.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Tipi di Shell sh – Bourne shell csh – C shell ksh – Korn shell
Claudio Rocchini - Interfacce
Programmazione e Laboratorio di Programmazione
Ricorsione 16/01/2019 package.
Programmazione e Laboratorio di Programmazione
File System ed Input/Output
Processi decisionali e funzioni di controllo
Programmazione e Laboratorio di Programmazione
Unità 1 Programmi base.
CICLO WHILE LINGUAGGIO C.
Programmazione e Laboratorio di Programmazione
PowerShell di Windows PowerShell è un shell che mette a disposizione un prompt interattivo e un interprete a riga di comando , per le sue caratteristiche.
Programmazione e Laboratorio di Programmazione
Programmazione Procedurale
Transcript della presentazione:

Lo scripting ben temperato Ing. Davide Bolcioni Consulente Sistemi Informativi Ovvero un tocco di eleganza nella programmazione della shell

Gli script vanno bene per... ➔ Personalizzare le proprie macchine ● invocati da cron, at... ➔ Sistematizzare operazioni ricorrenti risistema-foto [directory [camera]]

Gli script non vanno bene per... ➔ Programmi da distribuire ● meglio Perl, Python, Tcl... ● sottili differenze ➔ Algoritmi complessi ● mancano strutture dati (Wirth) ● difficoltà di debug ➔ Problemi di performance ● relativi

Note di buona creanza - 1 ➔ Non si mette l'estensione ● si vede che venite da Windows ● ha un altro significato, "source me" ➔ Si mette nel $PATH ● in /usr/local/bin per alcuni ● in $HOME/bin per altri

Note di buona creanza - 2 ➔ Non si cambia la shell di root ➔ usate #! /la/mia/shell in cima ➔ Non scrivere per csh e derivati ➔ cercare “csh programming considered harmful” ➔ bastano ksh, bash, ash, dash,... ➔ Funzionalità minime ➔ opzione -h ➔ codice di ritorno ➔ componibilità

Funzioni di comodo ➔ Onde scrivere script di comodo utilizzo ● vocabolario ➔ Semplici ● 80% risultato, 20% sforzo ➔ Portabili ● fino a un certo punto

Emettere avvisi stem() { # basename echo "$1" | sed 's:^.*/::' } warn() { echo `stem "$0"`: >&2 } Onde poter scrivere [ -e "$cam" ] && warn "Trovata \"$cam\""

Uscita su errore die() { warn exit 3 } Onde poter scrivere mount "$cam" || die "Non trovo \"$cam\""

Opzioni standard talkative=: laconic=: while getopts 'hvq' option; do case $option in h) usage ;; v) talkative=: ; laconic=false ;; q) talkative=false ; laconic=: ;; *) usage "Invalid option \"$option\"" ;; esac done

Messaggi e silenzi ➔ Il silenzio è la regola ➔ Avvisare in situazioni insolite $talkative || warn "Nessuna immagine" ➔ Prolissi su richiesta (-v) $laconic || echo "Trasformo foto $i di $n"

Aiuto exit_usage() { echo 'usage:' `stem "$0"` '[-v][-q]'... echo ' ' `stem "$0"` '-h'... exit "$1" } usage() { [ -z "$1" ] && exit_usage 0 warn exit_usage 2 >&2 }

Piccole attenzioni - 1 ➔ Di fronte agli ostacoli... ➔ sintassi $(...) non garantita ➔ sintassi `...` scomoda ➔... si fa un giro attorno echo "usage: $(stem "$0") [-v][-q]" echo usage: `stem "$0"` '[-v][-q]' ➔ Attenzione agli apici... ➔ prima servivano per allineare gli spazi ➔ altrimenti non servono

Piccole attenzioni - 2 mounted() { [ 1 = `mount | sed -n "s|^.*$1.*$|1|p"`] } Onde scrivere mounted /tmp || warn "molto strano" restituisce " missing ] "

Piccole attenzioni - 3 mounted() { [ 1 = `mount | sed -n "s|^.*$1.*$|1|p"` ] } con mounted /tmp || warn "molto strano" funziona ma con mounted /xxx || warn "normale" restituisce "test: argument expected"

Piccole attenzioni - 4 mounted() { [ x1 = x`mount | sed -n "s|^.*$1.*$|1|p"` ] } si sacrifica l'eleganza al risultato nascondendolo dentro una funzione

Funzioni e variabili locali ➔ Differenze nelle funzioni function f f() ➔ Differenze nelle variabili locali typeset local ➔ Morale: usa f() senza variabili locali

Uso di comandi esterni - 1 check() { eval "$1" 2>/dev/null && return 0 warn "$2" exit 3 } Onde poter scrivere check "tail </dev/null" "No tail(1) in $PATH"

Uso di comandi esterni - 2 ➔ A volte occorre industriarsi... check "sed q </dev/null" "No sed" check "gzip /dev/null" "No gzip" check "tar cf - /dev/null >/dev/null" "No tar" check "echo a | grep a >/dev/null" "No grep" check "echo a | tr -d a >/dev/null" "No tr" ➔... meglio non farsi male da soli check "registra-foto -h >/dev/null” "Eh ?"

Uno scheletro di script #! /usr/bin/ksh # funzioni: warn, die, check,... # variabili: talkative, laconic,... # while getopts... # check... # istruzioni modificanti...

Considerazioni finali ➔ Componibilità ● script che invocano script ( check ) ● script che invocano la grafica ( kdialog ) ● grafica che invoca gli script (Tcl/Tk) ➔ La "Advanced Bash Scripting Guide" ● una botte di trucchi ● non suggerisce dove fermarsi