Como seu arquivo deve receber o nome while.sh
, suponho que você queira usar a sintaxe sh
.
Você precisará:
- um comando para ler entrada. A maioria dos utilitários de texto pode fazer isso (é o que eles fazem por padrão).
sh
também tem um comandoread
builtin para ler a entrada em uma variável. - um comando para gravar saída e prompts. Muitos comandos para isso. O comando
printf
pode fazer isso e é construído na maioria dossh
intérpretes, mas como aqui, você deseja produzir várias coisas, você pode querer usar um comando que possa fazer isso várias vezes em um loop. - uma maneira de fazer aritmética inteira. Vários comandos para isso.
sh
também tem esse recurso criado na linguagem.
Por acaso, o comando awk
pode fazer todos os itens acima e por acaso tem uma construção while()
.
#! /bin/sh -
awk '
BEGIN {printf "Please enter a positive integer number: "}
{while(i <= $0) print i++; exit}'
Aqui, você não precisa realmente de sh
, você poderia também escrever:
#! /usr/bin/awk -f
BEGIN {printf "Please enter a positive integer number: "}
{while(i <= $0) print i++; exit}
bc
é outro comando que tem quase todos os 3. Falta a capacidade de ler a entrada do usuário, embora a implementação GNU o suporte como uma extensão:
#! /usr/bin/bc -q
"Please enter a prositive integer number: "
n = read()
i = 0
while (i <= n) i++
quit
Você também pode usar a construção while
do shell e chamar vários comandos em um loop, mas isso é geralmente considerado uma prática ruim , é menos eficiente e contribui para código feio (também se você quisesse validar a entrada do usuário, awk
fornece funcionalidade muito melhor do que os recursos internos do shell (a construção case
)):
#! /bin/sh -
printf 'Please enter a positive integer number: ' || exit
IFS= read -r number || [ -n "$number" ] || exit
i=0; while [ "$i" -le "$number" ]; do
printf '%s\n' "$i" || exit
i=$((i + 1))
done
Ao lado de sh
, que é executado até 3 + 2 × ( número + 2) comandos ( [
, read
e printf
, felizmente incorporados na maioria sh
intérpretes)! Compare com a única invocação de comando com awk
ou bc
acima.
Observe também que vários sistemas possuem um comando chamado seq
especificamente projetado para gerar sequências de números, um por linha (como seq 0 "$number"
). O script do shell (sendo shells antes de todos os interpretadores de linha de comando) é, antes de tudo, de chamar o (s) comando (s) certo (s) para a tarefa. Não é sobre programação, então eu acho estranho que seu professor peça para você usar o laço while
do shell.