Semplici comandi composti, come mettere insieme diversi comandi in una sequenza sulla riga di comando, vengono usati spesso. Tali comandi sono separati da punti e virgola, che definiscono la fine di un comando. Per creare una semplice serie di comandi della shell su una singola riga, separa semplicemente ogni comando usando un punto e virgola, in questo modo:
command1 ; command2 ; command3 ; command4 ;
Non è necessario aggiungere un punto e virgola finale perché premere il tasto Invio implica la fine del comando finale, ma va bene aggiungerlo per coerenza.
Il terminale Linux
- I 7 migliori emulatori di terminale per Linux
- 10 strumenti da riga di comando per l'analisi dei dati in Linux
- Scarica ora:cheat sheet SSH
- Cheat sheet sui comandi avanzati di Linux
- Esercitazioni sulla riga di comando di Linux
Tutti i comandi verranno eseguiti senza problemi, purché non si verifichino errori. Ma cosa succede se si verifica un errore? Possiamo anticipare e consentire errori utilizzando && e || operatori di controllo integrati in Bash. Questi due operatori di controllo forniscono un certo controllo del flusso e ci consentono di modificare la sequenza di esecuzione del codice. Il punto e virgola e la nuova riga i personaggi sono anche considerati operatori di controllo Bash.
Il && l'operatore dice semplicemente "se comando1 ha esito positivo, esegui comando2". Se comando1 non riesce per qualsiasi motivo, comando2 non verrà eseguito. Quella sintassi è simile a:
command1 && command2
Funziona perché ogni comando restituisce un codice alla shell che indica se è stato completato correttamente o non è riuscito durante l'esecuzione. Per convenzione, un codice di ritorno (RC) di 0 (zero) indica successo e qualsiasi numero positivo indica qualche tipo di errore. Alcuni strumenti di amministrazione di sistema restituiscono semplicemente un 1 per indicare qualsiasi errore, ma molti usano altri codici numerici positivi per indicare il tipo di errore.
$? della shell Bash la variabile può essere verificata molto facilmente da uno script, dal comando successivo in un elenco di comandi o anche direttamente da un amministratore di sistema. Diamo un'occhiata agli RC. Possiamo eseguire un semplice comando e controllare immediatamente l'RC, che riguarderà sempre l'ultimo comando eseguito.
[student@studentvm1 ~]$ ll ; echo "RC = $?"
total 284
-rw-rw-r-- 1 student student 130 Sep 15 16:21 ascii-program.sh
drwxrwxr-x 2 student student 4096 Nov 10 11:09 bin
<snip>
drwxr-xr-x. 2 student student 4096 Aug 18 10:21 Videos
RC = 0
[student@studentvm1 ~]$
Questo RC è 0, il che significa che il comando è stato completato correttamente. Ora prova lo stesso comando su una directory in cui non abbiamo i permessi.
[student@studentvm1 ~]$ ll /root ; echo "RC = $?"
ls: cannot open directory '/root': Permission denied
RC = 2
[student@studentvm1 ~]$
Il significato di questo RC può essere trovato nelle ls pagina man del comando.
Proviamo il && operatore di controllo in quanto potrebbe essere utilizzato in un programma a riga di comando. Inizieremo con qualcosa di semplice:crea una nuova directory e, se ha esito positivo, crea un nuovo file al suo interno.
Abbiamo bisogno di una directory in cui possiamo creare altre directory. Per prima cosa, crea una directory temporanea nella tua home directory dove puoi fare dei test.
[student@studentvm1 ~]$ cd ; mkdir testdir
Crea una nuova directory in ~/testdir , che dovrebbe essere vuoto perché l'hai appena creato, quindi crea un nuovo file vuoto in quella nuova directory. Il comando seguente eseguirà queste attività.
[student@studentvm1 ~]$ mkdir ~/testdir/testdir2 && touch ~/testdir/testdir2/testfile1
[student@studentvm1 ~]$ ll ~/testdir/testdir2/
total 0
-rw-rw-r-- 1 student student 0 Nov 12 14:13 testfile1
[student@studentvm1 ~]$
Sappiamo che tutto ha funzionato come dovrebbe perché la testdir directory è accessibile e scrivibile. Modifica le autorizzazioni su testdir quindi non è più accessibile all'utente studente come segue:
[student@studentvm1 ~]$ chmod 076 testdir ; ll | grep testdir
d---rwxrw-. 3 student student 4096 Nov 12 14:13 testdir
[student@studentvm1 ~]$
Utilizzando grep comando dopo la lunga lista (ll ) mostra l'elenco di testdir . Puoi vedere che l'utente studente non ha più accesso alla testdir directory. Ora eseguiamo quasi lo stesso comando di prima, ma cambialo per creare un nome di directory diverso all'interno di testdir .
[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1
mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
[student@studentvm1 ~]$
Anche se abbiamo ricevuto un messaggio di errore, utilizzando && l'operatore di controllo impedisce il tocco comando dall'esecuzione perché si è verificato un errore durante la creazione di testdir3 . Questo tipo di controllo del flusso logico da riga di comando può impedire che gli errori si aggreghino e creino un vero pasticcio. Ma rendiamo le cose un po' più complicate.
Il || control operator ci consente di aggiungere un altro comando che viene eseguito quando l'istruzione iniziale del programma restituisce un codice maggiore di zero.
[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 || echo "An error occurred while creating the directory."
mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
An error occurred while creating the directory.
[student@studentvm1 ~]$
La nostra sintassi dei comandi composti che utilizza il controllo del flusso assume questa forma generale quando utilizziamo && e || operatori di controllo:
preceding commands ; command1 && command2 || command3 ; following commands
Il comando composto che utilizza gli operatori di controllo può essere preceduto e seguito da altri comandi che possono essere correlati a quelli della sezione di controllo del flusso ma che non sono influenzati dal controllo del flusso. Tutti questi comandi verranno eseguiti indipendentemente da tutto ciò che avviene all'interno del comando composto di controllo del flusso.
Questi operatori di controllo del flusso possono rendere più efficiente il lavoro alla riga di comando gestendo le decisioni e informandoci quando si è verificato un problema. Li uso direttamente sulla riga di comando e negli script.
Puoi ripulire come utente root per eliminare la directory e il suo contenuto.
[root@studentvm1 ~]# rm -rf /home/student/testdir
Come si utilizzano gli operatori di controllo Bash? Fatecelo sapere nella sezione commenti.