Esistono due ambienti di programmazione disponibili su ogni sistema operativo simile a unix, Turing-complete e in grado di chiamare altri programmi: awk e sh , la famiglia di shell Bourne / POSIX. AWK è orientato all'elaborazione del testo (integra utility più specializzate), mentre sh è orientato all'essere un linguaggio di colla per mettere insieme i programmi. Sh è il linguaggio di scripting universale su Linux e in tutto il mondo unix.
Lo standard POSIX definisce le funzioni obbligatorie di sh stesso e delle utility associate. La maggior parte dei sistemi simil-unix è conforme a POSIX 1003.1-2004 (alias Single Unix v3, alias Open Group Base Specification numero 6); l'ultima versione di quello standard è POSIX 1003.1-2008 (aka Single Unix v4, aka Open Group Base Specification Issue 7).
Ogni sistema Linux e unix o Unix ha una shell in stile Bourne sul percorso /bin/sh
, e qualsiasi sistema non antico ha una shell conforme a POSIX (salvo il bug occasionale). Ogni moderno sistema unix-like (incluso Linux) supporta shebangs , quindi esegue automaticamente gli script /bin/sh
se la prima riga è #!/bin/sh
. Esistono sistemi POSIX in cui sh
si trova in un altro posto (in genere livelli di emulazione su sistemi operativi che non penseresti essere davvero simili a Unix).
I sistemi Linux incorporati potrebbero avere un sistema BusyBox ridotto che non implementa tutte le funzionalità POSIX. BusyBox ha un gran numero di opzioni in fase di compilazione per adattarsi a sistemi di dimensioni ridotte, quindi è difficile sapere in anticipo cosa aspettarsi, è necessario personalizzare gli script per un dispositivo specifico. BusyBox è l'implementazione più comune a ingombro ridotto di utility sh e assortite; un altro che potresti incontrare è l'ambiente shell estremamente ridotto in Android (le versioni successive sono meno anemiche).
I sistemi Linux non embedded hanno quasi sempre trattini o bash come /bin/sh
. Dash è una shell piccola e veloce che implementa poco più delle funzionalità POSIX. Bash è una shell più grande con più funzionalità.
I sistemi Linux non embedded hanno quasi sempre Bash installato come /bin/bash
. Quindi, per la portabilità su sistemi Linux non incorporati, puoi supporre che bash sia disponibile. Tra le utili funzionalità aggiuntive di bash vi sono gli array, la capacità di gestire comodamente i file dot, la pipestatus
variabile per ottenere lo stato di ritorno di tutti i comandi in una pipeline, operatori di confronto aggiuntivi per i tempi dei file e (nelle versioni recenti) la corrispondenza delle espressioni regolari .
Una delle caratteristiche della programmazione della shell è che non stai semplicemente usando il sh
programma, stai anche usando un numero di utility . La maggior parte delle utilità di manipolazione dei file e di elaborazione del testo su Linux sono i coreutils GNU (sui sistemi embedded, di solito provengono da BusyBox).
Se hai bisogno di portabilità oltre Linux, la soluzione migliore è attenersi a POSIX. Altre varianti di unix potrebbero non avere bash installato (bash fa parte dell'installazione standard su OSX, ma un pacchetto opzionale su * BSD e la maggior parte dei sistemi commerciali). Quasi tutte le varianti unix diverse da Linux e OSX (ad es. * BSD e sistemi commerciali) hanno una versione della shell Korn , almeno pdksh . Molte delle comode estensioni di bash provengono da ksh, quindi può essere utile scrivere script che possono essere eseguiti con entrambi, ma rilevare dove si trova bash o ksh su un sistema sconosciuto può essere un po 'una seccatura.
La shell non può fare tutto. Se hai bisogno di un linguaggio più sofisticato, le due scelte più comuni sono Perl e Python (qualsiasi altra cosa è molto indietro rispetto a un linguaggio di scripting unix). Perl è il linguaggio di scripting tradizionale e pochi sistemi Linux non incorporati lo mancano, ma Python sta guadagnando terreno (potenziato in parte essendo il linguaggio di scripting consigliato per Ubuntu). Nel mondo non Linux, Perl fa parte dell'installazione di base su OSX e OpenBSD; è facoltativo ma molto comunemente installato su FreeBSD e facoltativo ma spesso installato su NetBSD.
sh
.