Programa de script de shell Bash que solicita e lê dois inteiros do usuário.

2

Ok, estou tentando resolver esse problema há um tempo e estou chegando com erros de esquerda e direita. Esta é minha primeira vez tentando aprender o básico. Então, qualquer conselho seria útil!

Problema: Estou tentando escrever um programa de script de shell Bash que solicite e leia dois inteiros do usuário. O segundo argumento é considerado maior que o primeiro. A saída do programa é uma contagem de números que começam no primeiro número e terminam com o segundo número.

Em outras palavras, a saída ficaria assim:

    Please enter the first number:
    3
    Please enter the second number, larger than the first:
    6

    3
    4
    5
    6

Ok, então é isso que eu tenho até agora

    read -p "Please Enter the first number : " n1
     echo "$n1"
   read -p "Please Enter the second number, larger than the first : " n2
     echo "$n2"
   FIRSTV=0
   SECONDV=1
   if [ 1 -gt 0]
   then
   count=$((FIRSTV-SECONDV))
   echo $COUNT
   fi
    
por Linda 23.04.2016 / 05:46

1 resposta

2

Se você puder usar seq , poderá fazer isso:

read -p "Please Enter the first number : " n1
echo "$n1"
read -p "Please Enter the second number, larger than the first : " n2
echo "$n2"

seq "$n1" "$n2"

Se você tem que fazer isso inteiramente no shell e pode usar um shell moderno como bash , ksh , zsh etc (mas não ash ou dash ou similar estritamente POSIX shell), você poderia substitua o comando seq por:

eval "printf '%s\n' {$n1..$n2}"

Você precisa usar eval para a segunda versão porque as sequências do bash / ksh / etc esperam inteiros reais como {1..5} , não variáveis como {$n1..$n2} . eval expande as variáveis para que seus valores reais sejam usados dentro da sequência {...} .

se você quiser fazer isso com um loop e sem recursos extravagantes de bash / ksh / etc, você pode substituir as linhas seq ou eval por algo como:

c="$n1"

while [ "$c" -le "$n2" ] ; do
    echo "$c"
    c=$((c+1))
done

Isso funciona em qualquer shell compatível com POSIX, incluindo dash e ash , bem como bash etc.

    
por 23.04.2016 / 06:35