Unix / Linux - Operatori di base della shell
Ci sono vari operatori supportati da ciascuna shell. Discuteremo in dettaglio della shell Bourne (shell predefinita) in questo capitolo.
Discuteremo ora i seguenti operatori:
- Operatori aritmetici
- Operatori relazionali
- Operatori booleani
- Operatori di stringa
- Operatori di test dei file
La Bourne Shell originariamente non aveva alcun meccanismo per eseguire semplici operazioni aritmetiche, ma utilizza anche programmi esterni awk o expr.
L'esempio seguente mostra come aggiungere due numeri:
#!/bin/sh
val=`expr 2 + 2`
echo "Total value : $val"
Lo script sopra genererà il seguente risultato:
Total value : 4
I seguenti punti devono essere considerati durante l'aggiunta:
Devono essere presenti degli spazi tra operatori ed espressioni. Ad esempio, 2 + 2 non è corretto; dovrebbe essere scritto come 2 + 2.
L'espressione completa dovrebbe essere racchiusa tra ‘ ‘, chiamato backtick.
Operatori aritmetici
I seguenti operatori aritmetici sono supportati da Bourne Shell.
Assumi variabile a detiene 10 e variabile b detiene 20 quindi -
Operatore | Descrizione | Esempio |
---|---|---|
+ (Aggiunta) | Aggiunge valori su entrambi i lati dell'operatore | `expr $ a + $ b` darà 30 |
- (Sottrazione) | Sottrae l'operando di destra dall'operando di sinistra | `expr $ a - $ b` darà -10 |
* (Moltiplicazione) | Moltiplica i valori su entrambi i lati dell'operatore | `expr $ a \ * $ b` darà 200 |
/ (Divisione) | Divide l'operando sinistro per l'operando destro | `expr $ b / $ a` darà 2 |
% (Modulo) | Divide l'operando di sinistra per l'operando di destra e restituisce il resto | `expr $ b% $ a` darà 0 |
= (Assegnazione) | Assegna l'operando destro all'operando sinistro | a = $ b assegnerebbe il valore di b in a |
== (uguaglianza) | Confronta due numeri, se entrambi sono uguali restituisce vero. | [$ a == $ b] restituirà false. |
! = (Non uguaglianza) | Confronta due numeri, se entrambi sono diversi restituisce vero. | [$ a! = $ b] restituirà true. |
È molto importante capire che tutte le espressioni condizionali dovrebbero essere all'interno di parentesi quadre con spazi attorno ad esse, per esempio [ $a == $b ] è corretto mentre, [$a==$b] non è corretto.
Tutti i calcoli aritmetici vengono eseguiti utilizzando numeri interi lunghi.
Operatori relazionali
Bourne Shell supporta i seguenti operatori relazionali specifici per i valori numerici. Questi operatori non funzionano per i valori stringa a meno che il loro valore non sia numerico.
Ad esempio, gli operatori seguenti lavoreranno per verificare una relazione tra 10 e 20 nonché tra "10" e "20" ma non tra "dieci" e "venti".
Assumi variabile a detiene 10 e variabile b detiene 20 quindi -
Operatore | Descrizione | Esempio |
---|---|---|
-eq | Controlla se il valore di due operandi è uguale o meno; se sì, la condizione diventa vera. | [$ a -eq $ b] non è vero. |
-ne | Controlla se il valore di due operandi è uguale o meno; se i valori non sono uguali, la condizione diventa vera. | [$ a -ne $ b] è vero. |
-gt | Controlla se il valore dell'operando sinistro è maggiore del valore dell'operando destro; se sì, la condizione diventa vera. | [$ a -gt $ b] non è vero. |
-lt | Controlla se il valore dell'operando sinistro è inferiore al valore dell'operando destro; se sì, la condizione diventa vera. | [$ a -lt $ b] è vero. |
-ge | Controlla se il valore dell'operando sinistro è maggiore o uguale al valore dell'operando destro; se sì, la condizione diventa vera. | [$ a -ge $ b] non è vero. |
-le | Controlla se il valore dell'operando sinistro è minore o uguale al valore dell'operando destro; se sì, la condizione diventa vera. | [$ a -le $ b] è vero. |
È molto importante capire che tutte le espressioni condizionali devono essere inserite all'interno di parentesi quadre con spazi intorno. Per esempio,[ $a <= $b ] è corretto mentre, [$a <= $b] non è corretto.
Operatori booleani
I seguenti operatori booleani sono supportati da Bourne Shell.
Assumi variabile a detiene 10 e variabile b detiene 20 quindi -
Operatore | Descrizione | Esempio |
---|---|---|
! | Questa è la negazione logica. Ciò inverte una condizione vera in falsa e viceversa. | [! false] è vero. |
-o | Questo è logico OR. Se uno degli operandi è vero, la condizione diventa vera. | [$ a -lt 20 -o $ b -gt 100] è vero. |
-a | Questo è logico AND. Se entrambi gli operandi sono veri, la condizione diventa vera altrimenti falsa. | [$ a -lt 20 -a $ b -gt 100] è falso. |
Operatori di stringa
I seguenti operatori di stringa sono supportati da Bourne Shell.
Assumi variabile a contiene "abc" e variabile b tiene "efg" quindi -
Operatore | Descrizione | Esempio |
---|---|---|
= | Controlla se il valore di due operandi è uguale o meno; se sì, la condizione diventa vera. | [$ a = $ b] non è vero. |
!= | Controlla se il valore di due operandi è uguale o meno; se i valori non sono uguali, la condizione diventa vera. | [$ a! = $ b] è vero. |
-z | Controlla se la dimensione dell'operando stringa data è zero; se è di lunghezza zero, restituisce vero. | [-z $ a] non è vero. |
-n | Controlla se la dimensione dell'operando stringa data è diversa da zero; se è una lunghezza diversa da zero, restituisce true. | [-n $ a] non è falso. |
str | Controlla se strnon è la stringa vuota; se è vuoto, restituisce false. | [$ a] non è falso. |
Operatori di test dei file
Abbiamo alcuni operatori che possono essere utilizzati per testare varie proprietà associate a un file Unix.
Assumi una variabile file contiene un nome file esistente "test" la cui dimensione è di 100 byte e ha read, write e execute permesso su -
Operatore | Descrizione | Esempio |
---|---|---|
-b file | Controlla se il file è un file speciale a blocchi; se sì, la condizione diventa vera. | [-b $ file] è falso. |
-c file | Controlla se il file è un file speciale di caratteri; se sì, la condizione diventa vera. | [-c $ file] è falso. |
-d file | Controlla se il file è una directory; se sì, la condizione diventa vera. | [-d $ file] non è vero. |
-f file | Controlla se il file è un file ordinario anziché una directory o un file speciale; se sì, la condizione diventa vera. | [-f $ file] è vero. |
-g file | Controlla se il file ha il bit impostato per l'ID gruppo (SGID) impostato; se sì, la condizione diventa vera. | [-g $ file] è falso. |
-k file | Controlla se il file ha il suo sticky bit impostato; se sì, la condizione diventa vera. | [-k $ file] è falso. |
-p file | Controlla se il file è una named pipe; se sì, la condizione diventa vera. | [-p $ file] è falso. |
-t file | Controlla se il descrittore di file è aperto e associato a un terminale; se sì, la condizione diventa vera. | [-t $ file] è falso. |
-u file | Controlla se il file ha il bit Set User ID (SUID) impostato; se sì, la condizione diventa vera. | [-u $ file] è falso. |
-r file | Controlla se il file è leggibile; se sì, la condizione diventa vera. | [-r $ file] è vero. |
-w file | Controlla se il file è scrivibile; se sì, la condizione diventa vera. | [-w $ file] è vero. |
-x file | Controlla se il file è eseguibile; se sì, la condizione diventa vera. | [-x $ file] è vero. |
-s file | Controlla se il file ha una dimensione maggiore di 0; se sì, allora la condizione diventa vera. | [-s $ file] è vero. |
-e file | Controlla se il file esiste; è vero anche se file è una directory ma esiste. | [-e $ file] è vero. |
Operatori shell C
Il seguente collegamento ti darà una breve idea sugli operatori C Shell -
Operatori Korn Shell
Il seguente collegamento ti aiuta a capire gli operatori Korn Shell -