Script: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica Etichette: Modifica da mobile Modifica da web per mobile |
Nessun oggetto della modifica Etichette: Modifica da mobile Modifica da web per mobile |
||
(46 versioni intermedie di 33 utenti non mostrate) | |||
Riga 1:
{{nota disambigua}}
Il termine '''script''', in [[informatica]], designa un tipo particolare di [[programma (informatica)|programma]], scritto in una particolare classe di [[linguaggio di programmazione|linguaggi di programmazione]], detti [[linguaggio di scripting|linguaggi di scripting]]. Una classe specifica di tali programmi sono i cosiddetti ''[[shell script]]'', ossia script concepiti per essere [[esecuzione (informatica)|eseguiti]] all'interno di una [[shell (informatica)|shell]] di un [[sistema operativo]].
== Descrizione ==
La distinzione tra un programma normale ed uno script non è netta, ma generalmente negli script si possono individuare le seguenti caratteristiche:
Line 14 ⟶ 13:
===Script di shell===
Lo ''script di shell'' identifica uno script per una [[Shell (informatica)|shell]] testuale di un [[sistema operativo]], ovvero l'[[interfaccia a riga di comando]], il cui linguaggio è considerato un semplice [[linguaggio di programmazione]] per un determinato dominio. Uno script di questo genere esegue tipicamente operazioni legate all'[[Amministratore di sistema|amministrazione di sistema]] come la manipolazione di file (p. es. rinomine, copie o spostamenti), l'esecuzione di altri programmi, la stampa e la manipolazione di testo. Il vantaggio principale, nonché più diffusamente sfruttato, rispetto all'interazione diretta con la shell digitando un comando dopo l'altro, è l'automazione, cioè la possibilità di definire, una volta per tutte attraverso lo script, una serie di operazioni particolarmente simili o caratterizzabili in maniera sofisticata. In tal modo, la scrittura di uno script libera infatti l'autore, nell'ordine, dalla noia della
Sebbene molti [[Interprete (informatica)|interpreti]] dei linguaggi di shell siano dotati di interfaccia a riga di comando, come le varie shell dei sistemi [[Unix-like]] (p.es. [[Bash]], [[C shell]], [[Zsh]], [[Debian Almquist shell|Debian Almquist]]), o di quelli [[Windows]] ([[Windows PowerShell|PowerShell]], [[cmd.exe]] o [[command.com]]), diversi altri linguaggi, come [[AppleScript]] o [[Windows Script Host]] (WScript.exe), ne sono invece sprovvisti. Altri notevoli esempi di linguaggi di shell destinati principalmente alla scrittura di script sono il [[DIGITAL Command Language|DCL]] (''Digital Command Language'') dei sistemi [[Digital Equipment Corporation|DEC]] o il [[Job Control Language|JCL]] (''Job Control Language'') dei sistemi [[IBM]].
=== Vantaggi e svantaggi ===
Spesso, scrivere uno script di shell è molto più veloce che scrivere il [[codice sorgente|codice]] equivalente in altri linguaggi di programmazione. I molti vantaggi includono programma facile o selezione dei file, avvio rapido, e il debugging interattivo. Uno script di shell può essere usato per fornire una sequenza e il collegamento con il processo decisionale attorno ai programmi esistenti, e per gli script moderatamente grandi l'assenza di un passaggio di compilazione è un vantaggio. L'esecuzione interpretativa rende facile scrivere il codice di [[debug]] in uno script ed inoltre eseguire di nuovo rilevando e correggendo i bug. Gli utenti non esperti possono utilizzare script per personalizzare il comportamento dei programmi e script di shell forniscono alcune limitate possibilità di [[multiprocessing]].
D'altra parte, lo scripting di shell è soggetto a errori costosi. Errori di battitura involontaria come <
Un altro svantaggio significativo è la velocità di esecuzione lenta e la necessità di avviare un nuovo processo per quasi tutti i comandi di shell eseguiti. Quando lo script è un lavoro può essere realizzato creando una [[Pipeline dati|pipeline]] in cui un efficiente [[Filtro (Unix)|filtro]] di comandi esegue la maggior parte del lavoro, attenuando il rallentamento; ma uno script complesso è in genere diversi ordini di grandezza più
Allo stesso modo, script più complessi possono essere eseguiti in dei limiti del linguaggio di scripting di shell stessa; Questi limiti rendono difficile la scrittura di codice di qualità a causa delle estensioni di varie shell. Infatti se si pensasse di risolvere i problemi di shell con l'originale linguaggio di shell si potrebbero venire a creare inaspettati problemi peggiori.
Line 36 ⟶ 34:
Nella loro forma più semplice, uno script di shell è in grado di fornire una variazione conveniente di un comando di sistema in cui le particolari impostazioni di ambiente, le opzioni di comando, o di post-processing vengono applicate automaticamente, ma in un modo che permette al nuovo script di agire ancora come un normalissimo comando Unix.
Un esempio potrebbe essere quello di creare una nuova versione di [[ls (Unix)|ls]], il comando per elencare i file (dandogli un nome di comando più breve di <
<
#!/bin/sh
LC_COLLATE=C ls -FCas "$@"
</
Qui, [[Shabang|la prima linea (Shebang)]] indica quale interprete deve essere usato per eseguire il resto dello script, la seconda riga fa una lista con le opzioni per gli indicatori di [[formato di file]], colonne, tutti i file (nessuno omesso) e la dimensione in blocchi. <
L'utente deve quindi essere in grado di usare semplicemente <
===Batch jobs===
Line 51 ⟶ 49:
Gli script di shell permettono numerosi comandi i quali devono essere inseriti manualmente in una interfaccia a riga di comando da eseguire automaticamente, e senza che l'utente debba attendere per attivare ogni fase della sequenza. Ad esempio, in una directory con tre file di codice sorgente C, invece dell'esecuzione manuale dei quattro comandi necessari per costruire il programma definitivo, si potrebbe creare invece una [[C shell]] script, denominata costruita e conservata nella directory assieme a questi ultimi, la quale li compila in modo automatico:
<
#!/bin/csh
echo compiling...
Line 59 ⟶ 57:
cc -o myprog foo.o bar.o qux.o
echo done.
</syntaxhighlight>
Lo script dovrebbe consentire a un utente di salvare il file in corso di modifica, mettere in pausa l'editor, eseguirlo attraverso il comando <
Nel caso avviassimo un nuovo comando, a quest'ultimo verrebbe assegnato il numero successivo e marcato con il segno “-” (in attesa di esecuzione). Per vedere quali e quanti jobs sono in esecuzione, basterà dare il comando jobs ottenendo il relativo output. È possibile quindi permettere al comando di tornare in foreground utilizzando il comando fg seguito dal carattere “%” e dal numero del job. Se per esempio si volesse portare in foreground il secondo comando in coda, si digiterà fg %2. Il comando non potrà tornare in background fino alla sua conclusione. È possibile comunque aggirare questa limitazione sospendendo il job con la combinazione di tasti “CTRL Z” e riavviandolo tramite fg o bg. Un comando terminato non avviserà l'utente della conclusione del proprio lavoro se non esplicitamente indicato tramite notify %1 (in questo caso avvisa della terminazione del primo comando). È possibile infine procedere alla terminazione forzata del comando nel caso, ad esempio, entri in un ciclo infinito. Linux mette a disposizione il comando kill seguito dal numero che identifica il job (es. %1).
===Generalizzazione===
Processi batch semplici non sono insoliti per le attività isolate, ma l'uso di cicli di shell, test, e delle variabili offre molta più flessibilità agli utenti. Una [[bash]] (shell Bourne-Again script) converte le immagini [[JPEG]] in [[Portable Network Graphics|PNG]], fornendo i nomi di immagine sulla riga di comando - eventualmente attraverso caratteri jolly - invece di essere elencati all'interno dello script, dove è possibile creare questo file, in genere salvato come <
<
#!/bin/bash
for jpg in "$@" ; do # use $jpg in place of each filename given, in turn
Line 88 ⟶ 81:
echo all conversions successful # tell the user the good news
</syntaxhighlight>
Il jpg2png comando può quindi essere eseguito su una intera directory piena di immagini JPEG con appena <
===Verisimilitudine===
Una caratteristica fondamentale di script di shell è che l'invocazione dei loro interpreti è gestita come una caratteristica del sistema operativo di base. Così la shell d'utente piuttosto di essere solo in grado di eseguire script in linguaggio shell, o uno script avendo solamente la direttiva d'interprete gestita correttamente se è stato eseguito da una shell, (entrambi dei quali sono stati limitazioni nei primi anni di gestione della shell Bourne-Again script), la script di shell è inizializzata ed eseguita dal sistema operativo stesso. Uno script di shell moderno non può essere posto sullo stesso piano dei comandi di sistema, ma molti comandi di sistema sono in realtà degli script di shell (o più in generale, degli script, dato che alcuni di essi non sono interpretati da una shell, ma invece da linguaggi di scripting quali: [[Perl]], [[Python]], o altri linguaggi). Ciò vale anche per i codici di uscita ritorno come altre utilità di sistema per indicare il successo o il fallimento, permettendo così di identificarli come componenti di grandi programmi indipendentemente da come questi strumenti più grandi sono implementati.
Come i comandi standard del sistema, gli script di shell classicamente omettono qualsiasi tipo di estensione del file a meno che non siano destinati ad essere letti in una shell in esecuzione attraverso un meccanismo speciale dedita a questo scopo (ad esempio: <
===Programmazione===
Line 121 ⟶ 114:
* [[Bash]]
* [[AppleScript]]
* [[File batch|Batch]] (Linguaggio di scripting usato da [[MS-DOS]])
* [[ActionScript]]
* [[JavaScript]] (Linguaggio di scripting, utilizzabile da [[C++]])
Line 135 ⟶ 128:
==Voci correlate==
* [[Linguaggio di programmazione]]
* [[Linguaggio di scripting]]
* [[Shell (informatica)]]
* [[Windows PowerShell]]
* [[Windows Script Host]]
* [[Crontab]]
== Altri progetti ==
{{Interprogetto|
==Collegamenti esterni==
* {{Collegamenti esterni}}
* {{FOLDOC|script|script}}
* {{cita web|http://www.faqs.org/docs/air/tsshell.html|''An Introduction To Shell Programming'' by Greg Goebel}}
* {{cita web|http://steve-parker.org/sh/sh.shtml|''UNIX / Linux shell scripting tutorial'' by Steve Parker}}
* {{cita web|
* {{cita web |
* {{cita web|http://freebookcentre.net/UnixCategory/Free-Unix-Shell-Programming-Books-Download.html|Free Unix Shell scripting books}}
* {{cita web | 1 = http://www.caspur.it/~lanucara/lanucara_files/scripting.pdf | 2 = Linguaggi di scripting | accesso = 29 aprile 2011 | dataarchivio = 12 agosto 2011 | urlarchivio = https://web.archive.org/web/20110812185116/http://www.caspur.it/~lanucara/lanucara_files/scripting.pdf | urlmorto = sì }}
{{Portale|informatica}}
[[Categoria:
|