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 -

Mostra esempi

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 -

Mostra esempi

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 -

Mostra esempi

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 -

Mostra esempi

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 -

Mostra esempi

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 shell C

Operatori Korn Shell

Il seguente collegamento ti aiuta a capire gli operatori Korn Shell -

Operatori Korn Shell