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:
- A)Output1 Output1
Errada, porque a primeira verificação falha após o rm e a segunda também falha após o touch, já que o arquivo fica vazio.
- B)Output2 Output2
Certa, porque em ambas as verificações o teste -s retorna falso e o script imprime Output2 nas duas linhas.
- C)Output1 Output2
Errada, porque a primeira linha não imprime Output1: depois do rm o arquivo não existe e o teste -s falha.
- D)Output2 Output1
Errada, porque a segunda linha também não imprime Output1: o touch cria um arquivo vazio, e arquivo vazio não satisfaz -s.
- E)O script bash possui erro de sintaxe e não gera saída
Errada, porque o script não tem erro de sintaxe; os comandos Bash usados são válidos e a saída é gerada normalmente.
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.