SóProvas


ID
1682896
Banca
CESPE / CEBRASPE
Órgão
STJ
Ano
2015
Provas
Disciplina
Programação
Assuntos

Julgue o seguinte item, relativo à programação em Shellscript.

O resultado da execução do script Bash mostrado a seguir é representado por Valor final é 6.

var=0

func(){

      local var=$var;

      let var=var+1

}

while [ $var -lt 5 ]; do

            let var=var+1

done

func;

echo Valor final é $var


Alternativas
Comentários
  • Questão bastante simples, pessoal. Bastava atentar que será 5 a quantidade de iterações do laço while [ $var -lt 5 ]; do let var=var+1, e não 6 como a questão afirma. Gabarito Errada. Não vejo possibilidade de recurso.


    http://www.estrategiaconcursos.com.br/blog/comentarios-da-prova-analista-judiciario-suporte-em-ti-stj/

  • Notem que há duas variáveis var, uma "global" e outra local à função func. Inicialmente, var(global) = 0. Após as 5 iterações do while, var(global) = 5. A chamada à função func não altera o valor de var(global), e sim o valor de var(local), que inicia valendo 5 e termina a função valendo 6, quando é descartada por ser local à função. O trecho "echo Valor final é $var" refere-se à var(global) que é igual a 5.

  • Vamos resolver essa questão passo a passo. Para isso, numerei as linhas:

    1 var=0

    2 func(){

    3 local var=$var;

    4

    5 let var=var+1

    6 }

    7 while [ $var -lt 5 ]; do

    8 let var=var+1

    9 done

    10 func;

    11 echo Valor final é $var

    O código executa de cima pra baixo, linha a linha. Na linha 1, a var = 0; na linha 2, temos a função “func()” e, quando ela for chamada, na linha 10, o var da linha 3 assume o valor “0”; e o var da linha 5 assume o valor 0+1 = “1”.

    Eu fiz essa conta com a função func porque ela tá no código, mas ela não infuencia no valor final da variável conforme pede a questão. Repare que o while executa independentemente da função “func”, pois ele tá fora dela. Você pode até mesmo remover a função func e deixar só o while que ele executa normalmente.

    Voltando à sequência do código, quando entramos no loop, o while não enxerga o novo valor, ou seja, “1”, visto que se trata de um valor local da função interna func() - e, como vimos, while não tem nada a ver com ela. Var, então, continua sendo “0”.

    Fiz a tabela abaixo com um passo a passo para melhor compreensão:

    LOOP ; VALOR DA VARIAVEL

    Loop 1($var =0); Let var = 0+1 = 1

    Loop 2($var = 1); Let var = 1+ 1 = 2

    Loop 3($var = 2); Let var = 2+ 1 = 3

    Loop 4($var = 3); Let var = 3+ 1 = 4

    Loop 5($var = 4); Let var = 4+ 1 = 5 (Parou aqui, uma vez que a questão informa que o loop vai até antes de 5, ou seja, 4.

    Quando o while termina, seu valor final, de var assumiu o valor 5.