Latest web development tutorials

Shell operadores básicos

Shell e outras linguagens de programação, suporta uma variedade de operadores, incluindo:

  • operadores aritméticos
  • Operadores relacionais
  • operadores booleanos
  • Operadores de String
  • Arquivo operadores de teste

festança nativo não suporta operações matemáticas simples, mas pode ser alcançado através de outros comandos, como awk e expr, expr mais comumente usado.

expr é uma ferramenta de cálculo de expressão, usá-lo para completar a operação avaliador de expressão.

Por exemplo, para adicionar dois números (note o uso do `anti-aspas em vez de aspas simples '):

#!/bin/bash

val=`expr 2 + 2`
echo "两数之和为 : $val"

Correndo instância »

Executar o script, a saída é a seguinte:

两数之和为 : 4

Duas coisas a serem observados:

  • Entre expressões e os operadores devem ter um espaço, por exemplo, 2 + 2 é errado, você deve escrever 2 + 2, o qual estamos familiarizados com a maioria das linguagens de programação não são os mesmos.
  • expressão completa para ser `` contido, note que este personagem não é comumente usado entre aspas simples, a seguir a tecla Esc.

operadores aritméticos

A tabela a seguir lista os operadores aritméticos comuns, assumindo uma variável 10, a variável b é de 20:

operadores explicação Exemplos
+ adição `Expr $ resultado + $ B` é 30.
- subtração `Expr $ a - resultado $ B` é de -10.
* multiplicação `Expr $ a \ * resultados $ B` para 200.
/ divisão `Expr $ b / $ result a` é 2.
% restante `Expr $ b% resultado $ a` é 0.
= atribuição a = $ b variável b irá atribuir o valor de um.
== Equal. Usado para comparar dois números, mesmo retorno verdadeiro. [$ A == $ b] retorna false.
! = Não é igual. Usado para comparar dois números não são os mesmos retornos verdade. [$ A! = $ B] retorna verdadeiro.

Nota: A expressão condicional deve ser colocado entre colchetes, e incluir um espaço, por exemplo:[$ a == $ b] está errado e deve ser escrito como[$ a == $ b].

Exemplos

operadores aritméticos exemplos são os seguintes:

#!/bin/bash
# author:本教程
# url:www.w3big.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 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi

Executar o script, a saída é a seguinte:

a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a 不等于 b

Nota:

  • sinal de multiplicação (*) deve ser adicionado na frente de uma barra invertida (\) para atingir multiplicação;
  • se ... então ... fi é instruções condicionais, o follow-up será coberto.
  • No shell MAC da sintaxe expr é: $ ((expressão)), onde a expressão "*" precisa escapar símbolo "\".

Operadores relacionais

Os operadores relacionais suportam apenas digitais, não suporta a corda, a menos que o valor da cadeia é um número.

A tabela a seguir lista os operadores relacionais comumente usados, assumindo uma variável 10, a variável b é de 20:

operadores explicação Exemplos
-eq Detectar se dois números são iguais, retornos iguais verdadeiros. [$ A -eq $ b] retorna false.
-ne Detectar se dois números são iguais, não retorna a igualdade verdadeira. [$ A $ b -ne] retorna verdadeiro.
-gt A esquerda é maior do que o número detectados à direita, e em caso afirmativo, ele devolve verdadeiro. [$ A $ b -gt] retorna false.
Número de detecção é inferior à direita da esquerda, e em caso afirmativo, ele devolve verdadeiro. [$ A $ b -É] retorna verdadeiro.
-ge Detectar se o número é igual à direita do lado esquerdo da grande, e se assim for, ele retorna verdadeiro. [$ A $ b -ge] retorna false.
-le Se o número de detecção de menos do que ou igual à direita para a esquerda, se for, ele devolve verdadeiro. [$ A $ b -le] retorna verdadeiro.

Exemplos

operadores relacionais exemplos são os seguintes:

#!/bin/bash
# author:本教程
# url:www.w3big.com

a=10
b=20

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
   echo "$a -lt $b: a 小于 b"
else
   echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi

Executar o script, a saída é a seguinte:

10 -eq 20: a 不等于 b
10 -ne 20: a 不等于 b
10 -gt 20: a 不大于 b
10 -lt 20: a 小于 b
10 -ge 20: a 小于 b
10 -le 20: a 小于或等于 b

operadores booleanos

A tabela a seguir lista os operadores booleanos normalmente usados, assumindo uma variável 10, a variável b é de 20:

operadores explicação Exemplos
! Non-operação, a expressão é verdadeira retornos falsos, caso contrário, ele retorna true. [! Falso] retorna verdadeiro.
-o OR operação, há uma verdadeira expressão retorna true. [$ A -É 20 -o $ b -gt 100] retorna verdadeiro.
-a E as operações, as duas expressões são verdadeiras antes de retornar verdadeiro. [$ A -É 20 -a $ b -gt 100] retorna false.

Exemplos

Operadores Booleanos exemplos são os seguintes:

#!/bin/bash
# author:本教程
# url:www.w3big.com

a=10
b=20

if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
   echo "$a -lt 100 -a $b -gt 15 : 返回 true"
else
   echo "$a -lt 100 -a $b -gt 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
   echo "$a -lt 100 -o $b -gt 100 : 返回 true"
else
   echo "$a -lt 100 -o $b -gt 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
   echo "$a -lt 100 -o $b -gt 100 : 返回 true"
else
   echo "$a -lt 100 -o $b -gt 100 : 返回 false"
fi

Executar o script, a saída é a seguinte:

10 != 20 : a 不等于 b
10 -lt 100 -a 20 -gt 15 : 返回 true
10 -lt 100 -o 20 -gt 100 : 返回 true
10 -lt 100 -o 20 -gt 100 : 返回 false

Operadores lógicos

O que se segue descreve o operador lógico Shell, assumindo uma variável 10, a variável de b é de 20:

operadores explicação Exemplos
&& E lógico [[$ A -É 100 && $ b -gt 100]] retorna falso
|| OU lógico [[$ A -É 100 || $ b -gt 100]] retorna true

Exemplos

Exemplos de operadores lógicos são como se segue:

#!/bin/bash
# author:本教程
# url:www.w3big.com

a=10
b=20

if [[ $a -lt 100 && $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

if [[ $a -lt 100 || $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

Executar o script, a saída é a seguinte:

返回 false
返回 true

Operadores de String

A tabela seguinte lista comumente usados ​​operadores de string, assumidos como uma variável "abc", a variável b é "efg":

operadores explicação Exemplos
= Detectando duas seqüências são iguais, retornos iguais verdadeiros. [$ A = $ b] retorna false.
! = Detectar se duas seqüências são iguais, não retorna a igualdade verdadeira. [$ A! = $ B] retorna verdadeiro.
-z Detectar se o comprimento da corda é de 0 para 0 retorna verdadeiro. [-z $ A] retorna false.
-n Detectar se o comprimento da corda é 0, diferente de zero return true. [-n $ A] retorna verdadeiro.
str Detectar se a corda está vazio, não vazio return true. [$ A] retorna verdadeiro.

Exemplos

Operadores de String exemplos são os seguintes:

#!/bin/bash
# author:本教程
# url:www.w3big.com

a="abc"
b="efg"

if [ $a = $b ]
then
   echo "$a = $b : a 等于 b"
else
   echo "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
if [ -z $a ]
then
   echo "-z $a : 字符串长度为 0"
else
   echo "-z $a : 字符串长度不为 0"
fi
if [ -n $a ]
then
   echo "-n $a : 字符串长度不为 0"
else
   echo "-n $a : 字符串长度为 0"
fi
if [ $a ]
then
   echo "$a : 字符串不为空"
else
   echo "$a : 字符串为空"
fi

Executar o script, a saída é a seguinte:

abc = efg: a 不等于 b
abc != efg : a 不等于 b
-z abc : 字符串长度不为 0
-n abc : 字符串长度不为 0
abc : 字符串不为空

Arquivo operadores de teste

operador de teste de arquivo é usado para detectar uma variedade de atributos de arquivo Unix.

Atributo de detecção descrito como se segue:

operadores explicação Exemplos
arquivo -b Detectar se o arquivo é um arquivo de dispositivo de bloco, e se assim for, ele retorna true. [-b $ File] retorna false.
-c arquivo Detectar se o arquivo é um arquivo de dispositivo de caractere, e em caso afirmativo, ele retorna true. [-c $ File] retorna false.
arquivo -d Detectar se o arquivo é um diretório, e se assim for, ele retorna true. [-d $ Arquivo] retorna false.
-f arquivo Detectar se o arquivo é um arquivo comum (nem arquivo de diretório ou dispositivo) e, em caso afirmativo, ele retorna true. [-f $ File] retorna verdadeiro.
arquivo -g Detectar se um arquivo tem o bit SGID, e em caso afirmativo, ele retorna true. [-g $ File] retorna false.
arquivo -k Detectar se um arquivo tem o sticky bit (Bit Sticky), e em caso afirmativo, ele retorna true. [K $ File] retorna false.
arquivo -p Detectar se o arquivo é um pipe nomeado, e em caso afirmativo, ele retorna true. [-p $ File] retorna false.
arquivo -u Detectar se um arquivo tem o bit SUID, e em caso afirmativo, ele retorna true. [U $ File] retorna false.
arquivo -r Ele detecta se um arquivo é legível, e em caso afirmativo, ele retorna true. [-r $ File] retorna verdadeiro.
arquivo -w Detectar se o arquivo pode ser escrito, e em caso afirmativo, ele retorna true. [-w $ File] retorna verdadeiro.
arquivo -x Detectar se o arquivo é executável, e em caso afirmativo, ele retorna true. [-x $ File] retorna verdadeiro.
arquivo -s Detectar se o arquivo está vazio (o tamanho do arquivo é maior que 0), não está vazio return true. [-s $ File] retorna verdadeiro.
arquivo -e Detectar arquivo (incluindo diretório) existe, e em caso afirmativo, ele retorna true. [-e $ File] retorna verdadeiro.

Exemplos

arquivo variável indica o arquivo "/var/www/w3big/test.sh", o seu tamanho é de 100 bytes, com permissões rwx. O código a seguir irá detectar vários atributos do arquivo:

#!/bin/bash
# author:本教程
# url:www.w3big.com

file="/var/www/w3big/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

Executar o script, a saída é a seguinte:

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