GNU/Linux >> Linux Esercitazione >  >> Linux

Scripting Bash(III)

Questo è il terzo articolo di una serie incentrata sullo scripting di Gnu Bash. Nel primo articolo abbiamo appena creato un semplice script con i comandi, uno dopo l'altro. Abbiamo anche visto l'uso di alcune variabili.
Il secondo articolo riguardava alcune strutture di controllo bash. Questo riguarderà reindirizzamenti, pipe e sostituzione dei comandi.

I bei vecchi tempi

All'inizio c'era un principio:uno strumento dovrebbe fare una cosa e farla bene. Stava all'utente combinare questi strumenti per ottenere i risultati desiderati.

Ora noi (ammettiamolo:a volte anche tu potresti sentirti perso senza una GUI) facciamo (quasi) tutto con un mouse. Ma la riga di comando è ancora lì e altre volte per scrivere alcuni comandi o uno script è più facile che fare clic su ogni elemento dello schermo.

Reindirizzamento

Possiamo reindirizzare l'input o l'output di un comando prima che venga eseguito. Possiamo usare questo reindirizzamento per memorizzare l'output di un comando in un file. Oppure possiamo usare il reindirizzamento dell'input per leggere alcuni dati da un file.

Ad esempio, se vogliamo memorizzare lo stato corrente (cioè ls -l) di una cartella in un file di testo per confrontare le modifiche in un secondo momento, utilizziamo > operatore in questo modo:

ls -l > status.txt

Questo reindirizzerà l'output standard di ls -l in un file denominato status.txt. Se status.txt esiste già, verrà sovrascritto. Per aggiungere l'output standard a un file esistente, utilizzare >> operatore.

Per reindirizzare l'input standard a un comando, utilizzare < operatore. Ad esempio:

mysql somedb < file.sql

Per reindirizzare l'errore standard a qualche file, aggiungi il descrittore di file 2 (il descrittore di file 1 è l'output standard (stdout), 0 è per l'input (stdin)) al reindirizzamento:

comando 2> file

Prestare attenzione che non ci sia spazio tra il numero del descrittore di file e l'operatore. Se ci fosse uno spazio tra di loro, quel '2' diventa un parametro. Ad esempio:

Il primo comando è “ls (file) qualcosa ” e reindirizzare l'output di errore a status.txt. Nel secondo comando vediamo l'errore del nostro primo comando:il file chiamato qualcosa non è stato trovato.

Il terzo comando è ls files qualcosa e 2 (non esistono) e reindirizza l'output standard a status.txt. Gli errori (file non trovato) vengono stampati sullo schermo e nel quarto comando vediamo che status.txt è stato lasciato vuoto perché non ci sono file chiamati "2" o "qualcosa".

Possiamo combinare reindirizzamenti, come send stdout e stderr a un file, ma l'ordine dei reindirizzamenti è importante. Ad esempio:

Dal manuale di bash:i primi comandi indirizzano solo l'output standard al file combined.txt, perché l'errore standard è stato duplicato dallo standard output prima che lo standard output fosse reindirizzato al file combined.txt

Al secondo comando, l'output standard è stato reindirizzato al file combined.txt e quindi l'errore standard è stato reindirizzato a stdout.

Tubi

Dal manuale di bash:Una pipeline è una sequenza di uno o più comandi separati da uno degli operatori di controllo | o |& .

Il primo operatore collega lo standard output del primo comando allo standard input del secondo. Ad esempio, se non ricordo che posso usare i caratteri jolly nel comando ls e voglio elencare tutti gli script di shell nella cartella corrente posso fare un ls e filtra l'output con grep :

Le persone di Perl hanno un motto:«C'è più di un modo per farlo ». Personalmente penso che dovrebbe applicarsi (quasi) ovunque.

Il secondo operatore, collega l'errore standard del primo comando allo standard input del secondo. Ad esempio, sto usando il comando tr (che traduce i caratteri) per deridere i messaggi di errore:

Ho anche impostato la variabile shell LANG per cambiare l'output dallo spagnolo all'inglese.

Sostituzione dei comandi

Con la sostituzione del comando possiamo eseguire un comando all'interno del nostro script e utilizzare l'output di quel comando. È più facile capire come funziona con un esempio. Il comando seq viene utilizzato per produrre una sequenza di numeri:

Ad esempio, possiamo utilizzare questo output per creare cartelle con nomi sequenziali con sostituzione di comandi. Possiamo usare `comando` o $(comando) .

In questo esempio assegniamo l'output di seq 1 5 alla variabile i e utilizzalo in un ciclo for.

Rimani sintonizzato

Finora, abbiamo abbastanza per fare in modo che il computer faccia (molto) il lavoro per noi. Sta a te indagare su quei piccoli strumenti che svolgono un compito ma lo fanno molto bene e integrarli tramite script o nella riga di comando.

Per l'ultimo articolo di questa serie, mi concentrerò nella dialogo programma per creare una GUI (in realtà una TUI) per aggiungere interattività ai nostri script.


Linux
  1. Spiegazione del comando della trappola

  2. Bash wait Comando

  3. Script Bash(I)

  4. Utilizzo del comando Linux Basename negli script Bash

  5. comando di esportazione bash

Comando Bash printf

Bash Scripting – Dichiarazioni condizionali

Scripting Bash – Spiegazione del comando Printf con esempi

Come utilizzare il comando Date negli script Bash in Linux

Script Bash(II)

Bash Beginner Series #5:Utilizzo di operatori aritmetici negli script Bash