English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

运算符基本 Shell

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.

Operatori aritmetici

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 ]

Esempio online

Esempi di operatori aritmetici di seguito:

Esempio online

#!/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 "\".

Operatori di relazione

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.

Esempio online

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

Operatori booleani

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.

Esempio online

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

Operatore logico

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

Esempio online

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

Operatore di stringa

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.

Esempio online

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

Operatore di test sui file

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.

Esempio online

变量 file 表示文件 /var/www/w3codebox/test.sh,它的大小为 100 字节,具有 rwx 权限。以下代码,将检测该文件的各种属性:
#!/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

执行脚本,结果输出如下所示:

可读文件
可写文件
可执行文件
是文件普通
不是目录文件
不为空文件
存在文件