Pular para o conteúdo principal

Questão de Sistemas Operacionais — Scripts em Unix e Linux — VUNESP 2023

Sistemas OperacionaisScripts em Unix e Linux
Código
vu197476
Banca
VUNESP
Órgão
CM Monte Alto
Ano
2023
Cargo
AnTI ( )

Shell scripts são códigos interpretados em shells, sendo um dos mais conhecidos o bash. A variável $# em um shell script interpretado no bash tem como função armazenar, no momento da execução do script pela linha de comando,

  1. Aa quantidade de argumentos fornecidos.
  2. Bo nome do arquivo do script.
  3. Co path do caminho do script.
  4. Do nome do usuário que executou o script.
  5. Eos bits relacionados com a permissão do script.
Revelar gabarito e comentário

GabaritoA — a quantidade de argumentos fornecidos.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Variáveis especiais do Bash: o papel de $#

Gabarito: letra A. A variável especial $# no Bash armazena a quantidade de argumentos passados ao script na linha de comando — é exatamente o que a alternativa A descreve. As demais alternativas confundem $# com outras variáveis especiais: $0 (nome do script), $? (código de retorno do último comando), $USER (usuário) e $?/permissões (bits de permissão não são acessados por variável especial).

O Bash, assim como outros shells do tipo Bourne, oferece um conjunto de variáveis especiais que são preenchidas automaticamente pelo interpretador no momento da execução de um script. Essas variáveis são a forma de o script "enxergar" o ambiente em que foi chamado: quem o invocou, com quais argumentos, qual o código de retorno do último comando, qual o PID do processo atual, entre outros. Dominar essas variáveis é essencial para escrever scripts que se comportem de maneira dinâmica, pois elas permitem que o script reaja à forma como foi executado.

A variável $# é uma das mais utilizadas em scripts de validação. Ela conta quantos argumentos foram fornecidos após o nome do script. Por exemplo, se um script meuscript.sh for executado como ./meuscript.sh arg1 arg2 arg3, o valor de $# será 3. Esse valor é frequentemente usado em estruturas condicionais para verificar se o usuário forneceu a quantidade esperada de argumentos, como em if [ $# -ne 2 ]; then echo "Uso: $0 arquivo1 arquivo2"; exit 1; fi. Note que $0 (nome do script) não é contado em $# — apenas os argumentos posicionais $1, $2, etc.

A confusão mais comum é trocar $# por outras variáveis especiais. Veja a tabela com as principais:

Variável

Função

$#

Quantidade de argumentos fornecidos

$0

Nome do script (ou caminho, dependendo de como foi invocado)

$1, $2, ...

Argumentos posicionais individuais

$?

Código de retorno (exit status) do último comando executado

$$

PID do processo atual (do shell)

$!

PID do último processo executado em segundo plano

$@

Todos os argumentos como lista separada

$*

Todos os argumentos como uma única string

A banca explora exatamente essa confusão: as alternativas B, C, D e E apontam para outras variáveis ou conceitos. A alternativa B (nome do arquivo do script) corresponde a $0; a C (path do script) também se relaciona a $0 (quando invocado com caminho relativo/absoluto); a D (nome do usuário) é a variável de ambiente $USER ou $LOGNAME; e a E (bits de permissão) não é acessível por uma variável especial — as permissões são lidas com ls -l ou stat, e o código de retorno de um comando é $?, não os bits de permissão.

Guarde a fronteira entre $# (quantidade) e $0 (nome): é exatamente nela que as alternativas se dividem. A questão é de memorização direta, mas a pegadinha está em associar $# a algo relacionado ao script em si, quando na verdade ela se refere aos argumentos fornecidos.

Alternativa A — ✅ Correta ⟵ GABARITO

A alternativa A afirma que $# armazena "a quantidade de argumentos fornecidos". Isso está correto: $# é uma variável especial do Bash que contém o número de argumentos passados ao script na linha de comando. Por exemplo, ./script.sh a b c faz $# valer 3. É a definição literal da variável.

Alternativa B — ❌ Incorreta

A alternativa B diz que $# armazena "o nome do arquivo do script". Isso é função da variável especial $0, que contém o nome do script (ou o caminho, dependendo de como foi invocado). $# não tem relação com o nome do arquivo — é apenas a contagem de argumentos.

Alternativa C — ❌ Incorreta

A alternativa C afirma que $# armazena "o path do caminho do script". Novamente, isso é atributo de $0 quando o script é invocado com um caminho (ex.: ./script.sh faz $0 valer ./script.sh). $# não armazena caminho algum — apenas a quantidade de argumentos.

Alternativa D — ❌ Incorreta

A alternativa D diz que $# armazena "o nome do usuário que executou o script". O nome do usuário é acessível por variáveis de ambiente como $USER ou $LOGNAME, não por $#. $# é exclusivamente a contagem de argumentos.

Alternativa E — ❌ Incorreta

A alternativa E afirma que $# armazena "os bits relacionados com a permissão do script". As permissões de um arquivo são lidas com comandos como ls -l ou stat, e não há uma variável especial que as armazene. O $? armazena o código de retorno do último comando, mas isso não são bits de permissão. Portanto, a alternativa está totalmente fora do escopo de $#.

Gabarito: letra A$# é a quantidade de argumentos fornecidos ao script.

Link permanente: /questoes/vu197476