A linha verifica se o segundo parâmetro posicional é maior que 0
. Se a condição é verdadeira, então ela desloca os parâmetros posicionais 3, 4, ... para 1, 2, ... Se a condição é falsa, então ela desloca os parâmetros posicionais 2, 3, ... para 1, 2,. ..
Constantes com zero à esquerda são interpretadas como números octal. Dizer 10#$2
faz com que o parâmetro posicional $2
seja interpretado como um decimal. Você também pode consultar a Aritmética da Shell .
Como tal, ((10#$2 > 0))
verifica se o segundo parâmetro posicional representado na base 10 é maior que 0. 2>/dev/null
faz com que quaisquer erros resultantes desse teste sejam redirecionados para /dev/null
. Veja Expressões Aritméticas Bash para mais informações sobre o operador #
.
&&
e ||
são construções condicionais. Então, se a condição for verdadeira, então shift 2
é executado senão shift
é executado.
expression1 && expression2
True if both expression1 and expression2 are true.
expression1 || expression2
True if either expression1 or expression2 is true.
Como exemplo, consulte o seguinte:
$ ((10>42)) && echo greater || echo smaller # Condition is false so the 'echo smaller' expression is evaluated
smaller
$ ((100>42)) && echo greater || echo smaller # Condition is true so the 'echo greater' expression is evaluated
greater
Citações do manual :
((...))
(( expression ))
The arithmetic expression is evaluated according to the rules described below (see Shell Arithmetic). If the value of the expression is non-zero, the return status is 0; otherwise the return status is 1. This is exactly equivalent to
let "expression"