English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Come altri linguaggi di programmazione, lo Shell supporta molti operatori, tra cui:
Operatori aritmetici
Operatori di relazione
Operatori booleani
Operatore di stringa
Operatore di test sui file
Bash non supporta operazioni matematiche semplici nativamente, ma può essere implementato tramite altri comandi, ad esempio awk e expr, expr è il più utilizzato.
expr è uno strumento di calcolo espressioni, che può completare l'operazione di valutazione delle espressioni.
Ad esempio, sommare due numeri (Attenzione a utilizzare i backtick ` invece del singolo apice '):
#!/bin/bash val=`expr 2 + 2` echo "La somma dei due numeri è : $val"
执行脚本,结果输出如下所示:
La somma dei due numeri è : 4
Due punti da notare:
Gli espressioni e gli operatori devono avere uno spazio tra loro, ad esempio 2+2 non è corretto, deve essere scritto 2 + 2, che è diverso da molti linguaggi di programmazione che conosciamo.
L'espressione completa deve essere inclusa tra ` `, notare che questo carattere non è il singolo apice comune, situato sotto il pulsante Esc.
La tabella seguente elenca gli operatori aritmetici più comuni, presupponendo che la variabile a sia 10 e la variabile b sia 20:
Operatore | Spiegazione | Esempio |
---|---|---|
+ | Addizione | `expr $a + $b` restituisce 30. |
- | Sottrazione | `expr $a - $b` restituisce -10. |
* | Moltiplicazione | `expr $a * $b` restituisce 200. |
/ | Divisione | `expr $b / $a` restituisce 2. |
% | Resto | `expr $b % $a` restituisce 0. |
= | Assegnazione | a=$b assegnerà il valore di b alla variabile a. |
== | Uguale. Usato per confrontare due numeri, se uguali restituisce true. | [ $a == $b ] restituisce false. |
!= | Diverso. Usato per confrontare due numeri, se diversi restituisce true. | [ $a != $b ] restituisce true. |
Attenzione:L'espressione condizionale deve essere messa tra parentesi quadre e deve avere uno spazio, ad esempio: [$a==$b] È sbagliato, deve essere scritto [ $a == $b ]。
Esempi di operatori aritmetici di seguito:
#!/bin/bash # author:基础教程 # url:it.oldtoolbag.com a=10 b=20 val=`expr $a + $b` echo "a + b : $val" val=`expr $a - $b` echo "a - b : $val" val=`expr $a * $b` echo "a * b : $val" val=`expr $b / $a` echo "b / a : $val" val=`expr $b % $a` echo "b % a : $val" if [ $a == $b ] then echo "a è uguale a b" fi if [ $a != $b ] then echo "a non è uguale a b" fi
执行脚本,结果输出如下所示:
a + b : 30 a - b : -10 a * b : 200 b / a : 2 b % a : 0 a non è uguale a b
Attenzione:
Prima del segno di moltiplicazione (*) deve essere aggiunto il backslash (\) per eseguire l'operazione di moltiplicazione;
if...then...fi è una istruzione condizionale, che verrà spiegata in seguito.
La sintassi di expr nel shell di MAC è:$((espressione))in questo'espressione, il "*" non richiede il simbolo di escape "\".
Gli operatori di relazione supportano solo numeri, non stringhe, a meno che il valore della stringa sia un numero.
La tabella seguente elenca gli operatori di relazione più comuni, supponiamo che la variabile a sia 10 e la variabile b sia 20:
Operatore | Spiegazione | Esempio |
---|---|---|
-eq | Verifica se i due numeri sono uguali, se lo sono, restituisce true. | [ $a -eq $b ] restituisce false. |
-ne | Verifica se i due numeri sono diversi, se lo sono, restituisce true. | [ $a -ne $b ] restituisce true. |
-gt | Verifica se il numero a sinistro è maggiore del numero destro, se lo è, restituisce true. | [ $a -gt $b ] restituisce false. |
-lt | Verifica se il numero a sinistro è minore del numero destro, se lo è, restituisce true. | [ $a -lt $b ] restituisce true. |
-ge | Verifica se il numero a sinistro è maggiore o uguale al numero destro, se lo è, restituisce true. | [ $a -ge $b ] restituisce false. |
-le | Verifica se il numero a sinistro è minore o uguale al numero destro, se lo è, restituisce true. | [ $a -le $b ] restituisce true. |
Esempi di operatori di relazione di seguito:
#!/bin/bash # author:基础教程网 # url:it.oldtoolbag.com a=10 b=20 if [ $a -eq $b ] then echo "$a -eq $b : a è uguale a b" else echo "$a -eq $b: a non è uguale a b" fi if [ $a -ne $b ] then echo "$a -ne $b: a non è uguale a b" else echo "$a -ne $b : a è uguale a b" fi if [ $a -gt $b ] then echo "$a -gt $b: a è maggiore di b" else echo "$a -gt $b: a non è maggiore di b" fi if [ $a -lt $b ] then echo "$a -lt $b: a è minore di b" else echo "$a -lt $b: a non è minore di b" fi if [ $a -ge $b ] then echo "$a >= $b: a maggiore o uguale a b" else echo "$a >= $b: a minore di b" fi if [ $a -le $b ] then echo "$a <= $b: a minore o uguale a b" else echo "$a <= $b: a maggiore di b" fi
执行脚本,结果输出如下所示:
10 == 20: a uguale a b 10 != 20: a non uguale a b 10 <= 20: a non maggiore di b 10 < 20: a minore di b 10 >= 20: a minore di b 10 <= 20: a minore o uguale a b
La tabella elenca gli operatori booleani comuni, supponendo che la variabile a sia 10 e la variabile b sia 20:
Operatore | Spiegazione | Esempio |
---|---|---|
! | Operatore NOT, restituisce false se l'espressione è true, altrimenti restituisce true. | [ ! false ] restituisce true. |
-o | Operatore OR, restituisce true se almeno un'espressione è true. | [ $a -lt 20 -o $b -gt 100 ] restituisce true. |
-a | Operatore AND, restituisce true solo se entrambi gli espressioni sono true. | [ $a -lt 20 -a $b -gt 100 ] restituisce false. |
Esempi di operatori booleani di seguito:
#!/bin/bash # author:基础教程 # url:it.oldtoolbag.com a=10 b=20 if [ $a != $b ] then echo "$a != $b : a non è uguale a b" else echo "$a == $b: a uguale a b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a minore di 100 e $b maggiore di 15: restituisce true" else echo "$a minore di 100 e $b maggiore di 15: restituisce false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a minore di 100 o $b maggiore di 100: restituisce true" else echo "$a minore di 100 o $b maggiore di 100: restituisce false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a minore di 100 o $b maggiore di 100: restituisce true" else echo "$a minore di 5 o $b maggiore di 100: restituisce false" fi
执行脚本,结果输出如下所示:
10 != 20: a non uguale a b 10 minore di 100 e 20 maggiore di 15: restituisce true 10 minore di 100 o 20 maggiore di 100: restituisce true 10 minore di 5 o 20 maggiore di 100: restituisce false
Di seguito viene presentato l'operatore logico di Shell, presupponendo che la variabile a sia 10 e la variabile b sia 20:
Operatore | Spiegazione | Esempio |
---|---|---|
&& | Logica AND | [[ $a -lt 100 && $b -gt 100 ]] restituisce false |
|| | Logica OR | [[ $a -lt 100 || $b -gt 100 ]] restituisce true |
Esempi di operatori logici come segue:
#!/bin/bash # author:基础教程网 # url:it.oldtoolbag.com a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "Restituisce true" else echo "Restituisce false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "Restituisce true" else echo "Restituisce false" fi
执行脚本,结果输出如下所示:
Restituisce false Restituisce true
La tabella di seguito elenca gli operatori di stringa comuni, presupponendo che la variabile a sia "abc" e la variabile b sia "efg":
Operatore | Spiegazione | Esempio |
---|---|---|
= | Verifica se due stringhe sono uguali, se sono uguali restituisce true. | [ $a = $b ] restituisce false. |
!= | Verifica se due stringhe non sono diverse, se non sono diverse restituisce true. | [ $a != $b ] restituisce true. |
-z | Verifica se la lunghezza della stringa è 0, se è 0 restituisce true. | [ -z $a ] restituisce false. |
-n | Verifica se la lunghezza della stringa non è 0, se non è 0 restituisce true. | [ -n "$a" ] restituisce true. |
$ | Verifica se la stringa è vuota, se non è vuota restituisce true. | [ $a ] restituisce true. |
Esempi di operatori di stringa come segue:
#!/bin/bash # author:基础教程网 # url:it.oldtoolbag.com a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a è uguale a b" else echo "$a = $b: a non è uguale a b" fi if [ $a != $b ] then echo "$a != $b : a non è uguale a b" else echo "$a != $b: a è uguale a b" fi if [ -z $a ] then echo "-z $a : la lunghezza della stringa è 0" else echo "-z $a : la lunghezza della stringa non è 0" fi if [ -n "$a" ] then echo "-n $a : la lunghezza della stringa non è 0" else echo "-n $a : la lunghezza della stringa è 0" fi if [ $a ] then echo "$a : la stringa non è vuota" else echo "$a : la stringa è vuota" fi
执行脚本,结果输出如下所示:
abc = efg: a non è uguale a b abc != efg : a non è uguale a b -z abc : La lunghezza della stringa non è 0 -n abc : La lunghezza della stringa non è 0 abc : La stringa non è vuota
L'operatore di test sui file viene utilizzato per verificare vari attributi dei file Unix.
La descrizione delle proprietà come segue:
Operatore | Spiegazione | Esempio |
---|---|---|
-b file | Verifica se il file è un file di dispositivo a blocchi, se sì, restituisce true. | [ -b $file ] restituisce false. |
-c file | Verifica se il file è un file di dispositivo a caratteri, se sì, restituisce true. | [ -c $file ] restituisce false. |
-d file | Verifica se il file è una directory, se sì, restituisce true. | [ -d $file ] restituisce false. |
-f file | Verifica se il file è un file normale (né directory né file di dispositivo), se sì, restituisce true. | [ -f $file ] restituisce true. |
-g file | Verifica se il file ha impostato il bit SGID, se sì, restituisce true. | [ -g $file ] restituisce false. |
-k file | Verifica se il file ha impostato il bit Stick, se sì, restituisce true. | [ -k $file ] restituisce false. |
-p file | Verifica se il file è una pipe nomina, se sì, restituisce true. | [ -p $file ] restituisce false. |
-u file | Verifica se il file ha impostato il bit SUID, se sì, restituisce true. | [ -u $file ] restituisce false. |
-r file | Verifica se il file è leggibile, se sì, restituisce true. | [ -r $file ] restituisce true. |
-w file | Verifica se il file è scrivibile, se sì, restituisce true. | [ -w $file ] restituisce true. |
-x file | Verifica se il file è eseguibile, se sì, restituisce true. | [ -x $file ] restituisce true. |
-s file | Verifica se il file è vuoto (se la dimensione del file è maggiore di 0), se non è vuoto restituisce true. | [ -s $file ] restituisce true. |
-e file | Verifica se il file (inclusi i directory) esiste, se sì, restituisce true. | [ -e $file ] restituisce true. |
Altri simboli di controllo:
-S: Determina se un file è un socket.
-L: Verifica se il file esiste e se è un link simbolico.
#!/bin/bash # author:基础教程网 # url:it.oldtoolbag.com file="/var/www/w3codebox/test.sh" if [ -r $file ] then echo "文件可读" else echo "文件不可读" fi if [ -w $file ] then echo "文件可写" else echo "文件不可写" fi if [ -x $file ] then echo "文件可执行" else echo "文件不可执行" fi if [ -f $file ] then echo "文件为普通文件" else echo "文件为特殊文件" fi if [ -d $file ] then echo "文件是目录" else echo "文件不是目录" fi if [ -s $file ] then echo "文件不为空" else echo "文件为空" fi if [ -e $file ] then echo "存在文件" else echo "不存在文件" fi
执行脚本,结果输出如下所示:
可读文件 可写文件 可执行文件 是文件普通 不是目录文件 不为空文件 存在文件