Questão nº 53
Questão de Análise de Sistemas · CESGRANRIO BNDES 01/2024 (nº 53)
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á
- A3
- B4 (alternativa correta)
- C7
- D10
- E21
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 executasum=$((\$1-\$2)), que é 7-3=4. Oreturn $sumdevolve 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
sumcom base na condição. A armadilha é achar quereturnfunciona 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 oelsesobrescrevesumcom a subtração. O aluno que marca 10 esquece que oifaltera o valor antes doreturn. - (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.