Entrada de Teclado e Aritmética

Início |

Anterior | Conteúdo | Próximo

Até agora, os nossos scripts não têm sido interactivos. Ou seja, eles não aceitaram qualquer contributo do utilizador. Nesta lição, veremos como os nossos scripts canask questions, e obter e usar respostas.

read

Para obter entradas do teclado, usamos o comando read. O comando read recebe a entrada do teclado e atribui-a ao avariável. Aqui está um exemplo:

#!/bin/bashecho -n “Introduza algum texto >read textoecho “Introduziu: $text”

Como podemos ver, exibimos um prompt na linha 3. Note que “-n“dado ao comando echo faz com que o cursor se mantenha na mesma linha; isto é.., não produz um linefeed no final do prompt.

Next, invocamos o comando read com”text” como seu argumento. O que isto faz é esperar que o utilizador digite algo seguido da tecla Enter e depois atribuir o que quer que tenha sido digitado à variável text“.

Aqui está o script em acção:

$ read_demo.bashEntrar algum texto >this is some textVocê entrou: isto é algum texto

Se não dermos o read comandar o nome da avaria para atribuir a sua entrada, utilizará a variável de ambienteREPLY.

O comando read tem várias opções de linha de comando. As três mais interessantes são -p-t e-s.

A opção -p permite-nos especificar um prompt para preceder a entrada do utilizador. Isto poupa o passo extra de utilizar um eco para solicitar ao utilizador. Aqui está o anterior examplerewritten para usar o -p option:

#!/bin/bashread -p “Introduza algum texto > ” textecho “Introduziu: $text”

O comando -t opção seguida por um número de segundos fornece um tempo limite anautomático para o comando read. Isto significa que o comando read desistirá após o número de segundos especificado, se não tiver sido recebida qualquer resposta do utilizador.Esta opção pode ser usada no caso de um script que deve continuar (talvez com uma resposta padrão) mesmo que o utilizador não responda aos pedidos. Aqui está o -t opção em acção:

#!/bin/bashecho -n “Despacha-te e escreve qualquer coisa! >if read -t 3 resposta; thenecho “Óptimo, conseguiu a tempo!”elseecho “Desculpe, você é demasiado lento!”fi

A opção -s faz com que a digitação do utilizador não seja exibida.

Aritmética

Desde que estejamos a trabalhar num computador, é natural esperar que ele possa executar alguma aritmética simples. A concha fornece características para integeraritmética.

O que é um integer? Isso significa números inteiros como 1, 2, 458, -2859. Não significa números fracionários como 0,5, .333, ou 3,1415. Para lidar com números fracionários, existe um programa separado chamado bc que fornece uma linguagem calculadora de precisão arbitrária. Pode ser usado em shell scripts, mas está fora do âmbito deste tutorial.

Vamos dizer que queremos usar a linha de comando como uma calculadora primitiva. Cando assim:

$ echo $((2+2))

Quando rodeamos uma expressão aritmética com os parênteses duplos, esta executará a expansão aritmética.

Nota que o espaço em branco é ignorado:

$ echo $((2+2))echo $(( 2+2 ))echo $(( 2 + 2 ))4

A concha pode realizar uma variedade de operações aritméticas comuns (e não tão comuns). Aqui está um exemplo:

#!/bin/bashfirst_num=0second_num=0read -p “Introduza o primeiro número –> ” first_numread -p “Introduza o segundo número -> ” second_numecho “first number + second number = $((first_num + second_num))”echo “first number – second number = $((first_num – first_num – first number = $((first_num – first_num) second_num))”echo “primeiro número * segundo número = $((first_num * second_num)))”echo “primeiro número / segundo número = $((first_num / second_num))”echo “primeiro número % segundo número = $((first_num % segundo_num))”echo “first number raised to the”echo “power of the second number = $((first_num ** second_num))”

Notice como o “$” não é necessário para fazer referência a variáveis como “first_num +second_num“.

Teste este programa e observe como lida com a divisão (lembre-se, esta divisão isinteira) e como lida com grandes números. Números que ficam demasiado grandes como o odómetro de um carro quando este excede o número de milhas, foi concebido para contar. Começa de novo, mas primeiro passa por todos os números então negativos devido à forma como os números inteiros são representados na memória. A divisão byzero (que é matematicamente inválida) causa um erro.

As primeiras quatro operações, adição, subtracção, multiplicação e divisão, são facilmente reconhecidas, mas a quinta pode não ser familiar. O símbolo”%” representa o resto (também conhecido como modulo). Esta operação realiza a divisão mas em vez de devolver um quociente de divisão, devolve o resto. Embora isto possa não parecer muito útil, na realidade, proporciona grande utilidade quando se escrevem programas. Por exemplo, quando a operação aremainder devolve zero, indica que o primeiro número é anexato múltiplo do segundo. Isto pode ser muito útil:

#!/bin/bashnumber=0read -p “Introduza um número > ” numberecho “Number is $number”if ;thenecho “O número é par”elseecho “O número é impar”fi

Or, neste programa que formata um número arbitrário de segundos em horas e minutos:

#!/bin/bashseconds=0read -p “Introduza o número de segundos > ” secondshours=$((seconds / 3600))seconds=$((seconds % 3600))minutes=$((seconds / 60))seconds=$((seconds % 60))echo “$hours hour(s) $minutes minute(s) $seconds second(s)”
Topo | Anterior | Índice | Próximo

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *