27Jun

The Beginner's Guide to Shell Scripting 3: Altri comandi di base &Catene

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 verso file e altri comandi.

Alcuni comandi utili di base

Ti abbiamo già fornito una descrizione 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 riga 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 i file come input per altri comandi.

Prima di andare avanti, copriamo alcuni comandi di base che possono essere utili in molti posti diversi.

echo - Questo comando stampa semplicemente( visualizza) la totalità del suo argomento sulla riga di comando come output

echo argomento con spazi

Come puoi vedere, i caratteri speciali devono essere "escapati" 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, virgolette singole e doppie si comportano diversamente. Per ulteriori informazioni, controlla Qual è la differenza tra virgolette singole e doppie nella shell Bash?

cat - 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 pattern grep

Ti assicuro che grep può fare di più, ma per ora limitiamoci alle cose più facili.

Reindirizzamento degli output

Per reindirizzare l'output di un comando su un file, utilizziamo un carattere speciale, il simbolo maggiore di( & gt;).

Cambiamo la nostra lista, dovremmo? Immettere il seguente comando:

echo pepperoni & gt;list

Puoi vedere che echo non mostra più la linea, e quando guardiamo i contenuti del file "list", vediamo ciò che abbiamo echeggiato lì.

Inoltre prendi nota che i precedenti contenuti di "elenco" sono stati rimossi. Provalo ancora:

Questo può essere utile quando vuoi riutilizzare un file, ma spesso vogliamo solo aggiungerlo a un file esistente. Per questo, usiamo due simboli più grandi consecutivi:

echo yellow peppers & gt; & gt;elenca

facile! Usiamo questo comando per creare una lista più ampia, dovremmo?

Eccoci. Penso che tu possa capire perché così tanti geek usano la linea di comando per creare elenchi di cose da fare e simili, ma migliora ancora.

Prendiamo l'output di un comando e lo inseriamo in un file:

ls -al / & gt;~ / 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.

Agisce molto come "& gt;" 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 si può vedere, grep è case-sensitive. Puoi usare il flag "-i" per farlo ignorare il caso.

Reindirizzamento degli input

È anche possibile prendere input dai file per i comandi utilizzando il simbolo minore di( & lt;).

cat & lt;elenca

"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 qualsiasi parola che abbia "pep" in esso dal nostro attuale file "lista" in un nuovo file chiamato "revisioni".

grep pep & lt;lista & gt;revisioni

Riposiamo questo comando e aggiungiamo qualche ordinamento.

grep pep & lt;lista |ordina & gt;revisioni

Questo utilizzerà "pep" come termine di ricerca dal file di input "list", 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 si può vedere, l'aggiunta del flag "-f" al comando sort 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.

A Simple Script

Creiamo uno script con il seguente formato:

script searchterm listfile

Prenderà il termine e utilizzerà grep per cercare attraverso 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, è possibile fare molto più che ordinare alfabeticamente. Dai un'occhiata alla pagina man per alcuni dei seguenti comandi:

  • tsort: una funzione di ordinamento topologica più avanzata
  • tr - ti consente di mappare caratteri specifici ad altri caratteri e di trascriverli tra loro.
  • uniq - rimuove qualsiasi awk
  • non leggibile( leggi: duplicato) - 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 aggiungerenuovi dati nelle colonne
  • look - 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 numero dei caratteri e altro

Abbiamo dato un'occhiataad alcune basi più oggi 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, ricercarli e manipolarli è la chiave.

Quali sono alcuni dei tuoi script preferiti? Hai degli script di uso speciale per i file di testo? Condividi quello che sai nei commenti!