Questão nº 53

Questão de Análise de Sistemas · CESGRANRIO BNDES 01/2024 (nº 53)

CESGRANRIO2024Analista - Análise de Sistemas (Suporte)Análise de Sistemas
Gabarito: Bver comentário ↓

Um operador de um sistema Linux, utilizando a linguagem de script bash, digitou o seguinte script:

#!/bin/bash
add (){

  sum=$((\$1+\$2))
  if [ $sum -lt 10 ];
  then
        sum=$((\$1*\$2))
  else
        sum=$((\$1-\$2))
  fi
  return $sum
}
read -p "Entre numero1: " int1
read -p "Entre numero2: " int2
add $int1 $int2
echo "o resultado = " $?

E gravou o arquivo como teste.sh.

Caso seja executado o bash teste.sh, tendo como entradas os números 7 e 3, o resultado será

Resposta comentada

Gabarito Alternativa B

O segredo aqui é que a função add usa return para devolver o valor, mas no Bash o return só aceita números de 0 a 255 e o valor é capturado com $? logo após a chamada. O $? guarda o status de saída do último comando, não uma variável comum. Além disso, o if compara a soma com 10, e como 7+3=10, a condição -lt 10 (menor que 10) é falsa, então o script executa o else, fazendo 7-3=4.

  • (A) Incorreta: 3 seria o resultado se a condição fosse verdadeira e a soma fosse menor que 10, mas aqui 7+3=10, então cai no else (subtração). A pegadinha é confundir o -lt (menor que) com -le (menor ou igual).
  • (B) Correta: Como 7+3=10, a condição [ $sum -lt 10 ] é falsa (10 não é menor que 10), então o script executa sum=$((\$1-\$2)), que é 7-3=4. O return $sum devolve 4, e $? captura esse valor, imprimindo "o resultado = 4".
  • (C) Incorreta: 7 seria o resultado se a função retornasse o primeiro argumento diretamente, mas o script sempre modifica sum com base na condição. A armadilha é achar que return funciona como em outras linguagens, mas aqui ele só devolve o status.
  • (D) Incorreta: 10 é a soma inicial, mas a condição -lt 10 é falsa, então o else sobrescreve sum com a subtração. O aluno que marca 10 esquece que o if altera o valor antes do return.
  • (E) Incorreta: 21 seria o resultado da multiplicação (7*3), mas isso só aconteceria se a soma fosse menor que 10. Como a soma é exatamente 10, a condição falha e a multiplicação não é executada. Essa é a pegadinha mais tentadora: inverter a lógica do if.

Fonte: CESGRANRIO BNDES 01/2024 Analista - Análise de Sistemas (Suporte) (Caderno Prova 4). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho