← Questões de Programação

Programação · PR-4 UFRJ · 2022

Questão comentada de Programação

Analise o script em bash a seguir: #!/bin/bash rm arq.txt [[ -s arq.txt ]] && echo Output1 || echo Output2 touch arq.txt [[ -s arq.txt ]] && echo Output1 || echo Output2 Assinale a opção que apresenta a saída do comando, levando em consideração a ordem correta:

Gabarito: B

No Bash, o teste [[ -s arquivo ]] verifica duas coisas ao mesmo tempo: se o arquivo existe e se ele tem tamanho maior que zero. Se ele estiver vazio, o teste falha, mesmo que o nome do arquivo exista. Aqui, o comando rm arq.txt tenta remover o arquivo, então, na primeira checagem, arq.txt não existe e a condição é falsa. Por isso o script imprime Output2. Depois, o comando touch arq.txt apenas cria o arquivo, mas sem colocar conteúdo dentro dele. Ou seja, ele passa a existir, mas continua com tamanho zero. E tamanho zero não satisfaz -s. Resultado: a segunda checagem também é falsa e novamente sai Output2. A ordem importa muito: primeiro o arquivo some, depois ele reaparece vazio. É aquele caso clássico em que o Bash não está interessado só em "ter arquivo", mas em "ter arquivo com conteúdo". Em prova, isso derruba muita gente que confunde existência com tamanho. Por isso, o gabarito B está correto: a saída é Output2 e depois Output2.

Continue treinando

Questões relacionadas