Toetsenbord Input en Rekenkunde

Home |

Vorige | Inhoud | Volgende

Tot nu toe zijn onze scripts niet interactief geweest. Dat wil zeggen, ze accepteerden geen invoer van de gebruiker. In deze les zullen we zien hoe onze scripts vragen kunnen stellen, en antwoorden kunnen krijgen en gebruiken.

lezen

Om invoer van het toetsenbord te krijgen, gebruiken we het read commando. Het read commando neemt invoer van het toetsenbord en wijst het toe aan avariable. Hier is een voorbeeld:

#!/bin/bashecho -n “Voer wat tekst in >read textecho “U heeft ingevoerd: $text”

Zoals we kunnen zien, hebben we een prompt weergegeven op regel 3. Merk op dat “-n“gegeven aan het echo commando ervoor zorgt dat het de cursor op dezelfde regel houdt; d.w.z.,

Daarna roepen we het read-commando op met “text” als argument. Dit commando wacht tot de gebruiker iets intypt, gevolgd door de Enter-toets, en wijst dan het getypte toe aan de variabele text.

Hier ziet u het script in actie:

$ read_demo.bashTik wat tekst in >this is some textU hebt getypt: dit is wat tekst

Als we het read commando niet de naam van avariabele geven om zijn invoer aan toe te wijzen, zal het de omgevingsvariabeleREPLY gebruiken.

Het read commando heeft verschillende command line opties.De drie meest interessante zijn -p-t en-s.

De optie -p stelt ons in staat een prompt op te geven die voorafgaat aan de invoer van de gebruiker. Dit bespaart de extra stap van het gebruik van een echo om de gebruiker te vragen. Hier is het eerdere voorbeeld herschreven om de -p optie te gebruiken:

#!/bin/bashread -p “Voer wat tekst in > ” textecho “U heeft ingevoerd: $text”

De optie -t gevolgd door een aantal seconden zorgt voor een automatische time-out van het read commando. Dit betekent dat het read commando het na het opgegeven aantal seconden opgeeft als er geen reactie is gekomen van de gebruiker.Deze optie zou gebruikt kunnen worden in het geval van een script dat moet doorgaan (misschien teruggrijpend op een standaard antwoord) zelfs als de gebruiker de prompts niet beantwoordt.Hier is de -t optie in actie:

#!/bin/bashecho -n “Schiet op en typ iets! >if read -t 3 response; thenecho “Geweldig, je bent op tijd!”elseecho “Sorry, je bent te langzaam!”fi

De-soptie zorgt ervoor dat het typen van de gebruiker niet wordt weergegeven.Dit is handig wanneer we de gebruiker vragen om een wachtwoord of andere vertrouwelijke informatie in te typen.

Ritmetiek

Omdat we met een computer werken, is het logisch dat we verwachten dat hij eenvoudige rekenkundige bewerkingen kan uitvoeren. De shell biedt mogelijkheden voor integeraritmetiek.

Wat is een integer? Dat zijn hele getallen zoals 1, 2, 458, -2859. Het zijn geen breukgetallen zoals 0,5, .333, of 3,1415. Om met breukgetallen om te gaan, is er een apart programma genaamd bc dat een willekeurige precisie rekentaal biedt. Het kan worden gebruikt in shell scripts, maar dat valt buiten het bestek van deze tutorial.

Laten we zeggen dat we de commandoregel willen gebruiken als een primitieve rekenmachine. Dat kunnen we als volgt doen:

$ echo $((2+2))

Wanneer we een rekenkundige uitdrukking omgeven met dubbele haakjes, zal de shell een rekenkundige uitbreiding uitvoeren.

Merk op dat spaties worden genegeerd:

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

De shell kan een verscheidenheid aan gewone (en niet zo gewone) rekenkundige bewerkingen uitvoeren. Hier is een voorbeeld:

#!/bin/bashfirst_num=0second_num=0read -p “Voer het eerste getal in –> ” first_numread -p “Voer het tweede getal in –>> ” second_numecho “eerste getal + tweede getal = $((eerste_num + tweede_num))”echo “eerste getal – tweede getal = $((eerste_num – tweede_num))”echo“eerste getal * tweede getal = $((eerste_num * tweede_num))”echo“eerste getal / tweede getal = $((eerste_getal / tweede_getal))”echo “eerste getal % tweede getal = $((eerste_getal % tweede_getal))”echo “eerste getal verheven tot de”echo “macht van het tweede getal = $((eerste_getal ** tweede_getal))”

Merk op hoe de leidende “$” niet nodig is om te verwijzen naar variabelen binnen de rekenkundige uitdrukking, zoals “first_num +second_num“.

Probeer dit programma eens uit en kijk hoe het met delen omgaat (vergeet niet dat dit een gehele deling is) en hoe het met grote getallen omgaat. Getallen die te groot worden lopen over, zoals de kilometerteller in een auto wanneer deze het aantal kilometers overschrijdt waarvoor hij is ontworpen. Hij begint opnieuw, maar gaat eerst door alle negatieve getallen heen vanwege de manier waarop gehele getallen in het geheugen worden weergegeven. Delen door nul (wat wiskundig ongeldig is) geeft wel een fout.

De eerste vier bewerkingen, optellen, aftrekken, vermenigvuldigen en delen, zijn gemakkelijk te herkennen, maar de vijfde bewerking is misschien niet zo bekend. Het “%” symbool staat voor rest (ook bekend als modulo). Deze bewerking voert deling uit, maar in plaats van een quotiënt zoals bij deling, geeft het de rest terug. Hoewel dit misschien niet erg nuttig lijkt, is het in feite van groot nut bij het schrijven van programma’s. Wanneer de rest bijvoorbeeld nul oplevert, geeft dat aan dat het eerste getal een exact veelvoud is van het tweede. Dit kan erg handig zijn:

#!/bin/bashnumber=0read -p “Voer een getal in > ” getalecho “Getal is $getal”if ;thenecho“Getal is even”elseecho“Getal is oneven”fi

Of, in dit programma dat een willekeurig aantal seconden omzet in uren en minuten:

#!/bin/bashseconds=0read -p “Voer aantal seconden in > ” secondshours=$((seconden / 3600))seconds=$((seconden % 3600))minutes=$((seconden / 60))seconds=$((seconden % 60))echo “$uur uur(en) $minuten minuut(en) $seconden seconde(n)”
Boven | Vorige | Inhoud | Volgende

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *