como selecionar várias saídas

1

Eu sou novo no bash scripting e não entendo o que há de errado com essa parte específica do meu script. estou tentando selecionar toda a saída que tenho no meu script. e tentando colocar em condição que, se todas essas condições não forem atendidas, então não é válido e, portanto, é válido.

if [[ 'echo $?' -ne {0..4} ]]
then
         echo "Its a Valid Date."
 else
         echo " Not valid date."
fi

Quando eu executo, recebo:

kpatel138@matrix:~/Lab2> ./cal2 1994 5 4
./cal2: line 40: unexpected argument '(' to conditional binary operator
./cal2: line 40: syntax error near '(0'
./cal2: line 40: 'if [[ 'echo $?' -ne (0..4) ]]'
    
por Kishan Patel 09.10.2014 / 19:33

1 resposta

2

'echo $?' é uma maneira complicada de escrever $? . Não faça as coisas da maneira mais complicada quando houver uma maneira óbvia e mais simples.

Eu acho que você quer testar se $? é um dos valores 0, 1, 2, 3 ou 4. A sintaxe que você está usando não faz sentido. Você pode testar todos os cinco casos de igualdade:

if [[ $? -eq 0 || $? -eq 1 || $? -eq 2 || $? -eq 3 || $? -eq 4 ]]; then …

Mas isso é excessivamente detalhado. Como você deseja permitir o intervalo de 0 a 4, teste se $? é maior que o valor mínimo e menor que o valor máximo.

if [[ $? -ge 0 && $? -le 4 ]]; then …

$? nunca é negativo, então o teste $? -ge 0 é supérfluo. Assim:

if [[ $? -le 4 ]]; then …

Isso também pode ser escrito usando uma expressão aritmética. Observe que o operador é diferente: construções condicionais em colchetes usam -eq , -ne , -le , -ge , -lt e -gt para comparar inteiros, enquanto expressões aritméticas têm uma sintaxe semelhante a C. / p>

if (($? <= 4)); then …
    
por 10.10.2014 / 03:13