The Beginner's Guide to Shell Scripting 3 Altri comandi e catene di base
Hai imparato come creare script, utilizzare argomenti e creare loop. Ora, diamo un'occhiata ad alcuni comandi di base, alla manipolazione dei file di testo e al reindirizzamento di input e output a file e altri comandi.
Alcuni comandi utili di base
Ti abbiamo già fornito una suddivisione di base degli script di shell e una struttura di loop for di esempio, ma assicurati di controllare quegli articoli se hai perso la nostra guida agli script di shell fino ad ora.
La linea di comando è meravigliosa per molte ragioni, e il reindirizzamento è uno dei più importanti. Se dovessi prendere nota e riprodurre l'output di ogni comando per intraprendere ulteriori azioni o utilizzarlo per qualcos'altro, allora saremmo tutti impazziti molto tempo fa. Il reindirizzamento ci consente di utilizzare quell'output e salvarlo o utilizzarlo immediatamente come input per un altro comando. Possiamo anche usare file come input per altri comandi.
Prima di andare avanti, copriamo alcuni comandi di base che possono essere utili in molti posti diversi.
eco - Questo comando stampa semplicemente (visualizza) l'interezza del suo argomento sulla riga di comando come output
argomento eco con spazi
Come puoi vedere, i caratteri speciali devono essere "sfuggiti" in modo che vengano trattati normalmente. Questo viene fatto usando una barra rovesciata (\) davanti al personaggio. È un'idea migliore usare le virgolette. Il comando echo funziona anche con le variabili.
Come puoi vedere, le virgolette singole e doppie si comportano diversamente. Per ulteriori informazioni, controlla Qual è la differenza tra virgolette singole e doppie in Bash Shell?
gatto - Questo comando visualizza il contenuto dei file di testo come output.
cat file_to_be_read
Diciamo che creiamo questo file di testo in nano:
Quando usiamo il comando cat sul file, possiamo vederlo in output.
grep - Questo è uno dei comandi più potenti e utili disponibili in Linux. Rappresenta la stampa di espressioni globali / regolari. Guarda attraverso un file e stampa qualsiasi linea che corrisponda a un particolare modello. Poiché questo modello si basa su "espressione regolare", una linea concisa può produrre una moltitudine di modelli da abbinare. Per non, però, è possibile inserire una terna per la ricerca.
file di modello di grep
Ti assicuro che grep può fare di più, ma per ora limitiamoci alle cose più facili.
Reindirizzamento delle uscite
Per reindirizzare l'output di un comando in un file, utilizziamo un carattere speciale, il simbolo maggiore di (>).
Cambiamo la nostra lista, dovremmo? Inserisci il seguente comando:
echo pepperoni> elenco
Puoi vedere che l'eco non mostra più la linea, e quando guardiamo i contenuti del file "elenco", vediamo ciò che abbiamo fatto eco lì.
Si noti inoltre che i precedenti contenuti di "elenco" sono stati rimossi. Riprova:
Questo può essere utile quando si desidera riutilizzare un file, ma spesso si desidera semplicemente aggiungerlo a un file esistente. Per questo, usiamo due simboli più grandi consecutivi:
echo yellow peppers >> lista
Facile! Usiamo questo comando per creare una lista più ampia, dobbiamo farlo?
Eccoci. Penso che tu possa capire perché così tanti geek usano la linea di comando per creare liste di cose da fare e cose simili, ma diventa ancora meglio.
Prendiamo l'output di un comando e inseritelo in un file:
ls -al /> ~ / rootlist
Creare elenchi di file, modificarli e quindi eseguire comandi su quelli che vuoi non è mai stato più semplice. E, mentre stiamo facendo queste funzioni di base nella riga di comando, anche queste funzionano bene negli script.
Piping o Chaining
Piping è così chiamato perché usa la pipe, (|; condivisa con il tasto \ sulla maggior parte delle tastiere). Essenzialmente, prende l'output di un comando e lo alimenta direttamente ad un altro. È possibile creare lunghe catene di comandi per ottenere in questo modo un risultato specifico molto specifico, ed è molto conveniente per comandi come grep.
Funziona molto come ">" tranne che può essere incatenato più volte e il suo effetto è più generale in quanto non ha bisogno di passare attraverso un file di testo.
Come puoi vedere, grep è case-sensitive. Puoi usare il flag "-i" per farlo ignorare il caso.
Reindirizzamento degli input
Puoi anche prendere input dai file per i comandi usando il simbolo minore di (<).
gatto < list
"Non è diverso dall'usare un argomento!" Si potrebbe dire. Bene, saresti corretto in questo caso. Dove il reindirizzamento degli input è davvero utile è nel concatenare i comandi insieme.
Diciamo che vogliamo filtrare ogni parola che contiene "pep" dal nostro attuale file "elenco" in un nuovo file chiamato "revisioni".
grep pep revisions
Ripetiamo questo comando e aggiungiamo qualche ordinamento.
grep pep revisions
Questo utilizzerà "pep" come termine di ricerca dal file di input "elenco", ordinarlo in ordine alfabetico (tutti i termini maiuscoli seguiti da tutti i termini minuscoli), quindi inviarlo nel file "revisioni".
Per illustrare il comando sort, diamo un'occhiata al seguente esempio:
Come puoi vedere, l'aggiunta del flag "-f" al comando sort ti consente di ignorare case. In questo modo è facile per noi alfabetizzare le righe nei file di testo e ignorare le maiuscole quando non ha importanza.
Un semplice script
Creiamo uno script con il seguente formato:
script searchterm listfile
Prenderà il termine e utilizzerà grep per cercare in un file di elenco, ordinare i risultati e quindi inviarli a un altro file.
Ecco la directory in cui testeremo lo script in:
E, possiamo creare un elenco di ciò che è qui dentro, quindi eseguire lo script.
Ecco qua! Più impari le regole delle espressioni regolari, più accuratamente puoi mettere insieme un comando di ricerca. E tutto ciò che è valido tra virgolette può essere sostituito dal tuo primo argomento!
Per quanto riguarda l'ordinamento, puoi fare di più che ordinare alfabeticamente. Dai un'occhiata alla pagina man per alcuni dei seguenti comandi:
- tsort: una funzione di smistamento topologico più avanzata
- tr - ti consente di mappare caratteri specifici ad altri personaggi e di trascriverli tra loro.
- uniq - rimuove qualsiasi non univoco (leggi: duplicato)
- awk: una lingua / funzione di elaborazione del testo veramente avanzata che può essere utilizzata per separare i campi nei nomi dei file
- cut, paste / join - comandi utili per isolare i campi da file di testo e aggiungere nuovi dati in colonne
- guarda: ricerche come grep, ma utilizza un file dizionario (che può essere specificato dall'utente) per la ricerca
- wc: consente di ottenere il conteggio delle parole, il conteggio delle righe, il conteggio dei caratteri e altro ancora
Oggi diamo un'occhiata ad alcune nozioni di base che possono essere utili sulla riga di comando come negli script. I dati basati su testo sono spesso al centro delle cose che usiamo quotidianamente, quindi essere in grado di lavorare con esso, cercarli e manipolarli è la chiave.
Quali sono alcuni dei tuoi script preferiti? Hai degli script di uso speciale per i file basati su testo? Condividi ciò che sai nei commenti!