| Er bestaan verschillende benaderingen om het palindroom van een getal in een Unix-shellscript te vinden. Hier zijn twee versies:één die alleen ingebouwde shell-opdrachten gebruikt (draagbaarder maar potentieel minder efficiënt voor zeer grote aantallen) en een andere die `awk` gebruikt (efficiënter voor grotere aantallen).
Versie 1:alleen ingebouwde shell-ins gebruiken (bash)
Deze versie is draagbaarder omdat deze alleen afhankelijk is van de functies die de meeste Bourne-compatibele shells gemeen hebben. Het is echter minder efficiënt voor zeer grote aantallen vanwege stringmanipulatie.
``` bash
#!/bin/bash
read -p "Voer een getal in:" num
Keer het getal om met tekenreeksmanipulatie
reversed_num=$(echo "$num" | rev)
Vergelijk de originele en omgekeerde cijfers
if [ "$num" =="$omgekeerd_num" ]; Dan
echo "$num is een palindroom."
anders
echo "$num is geen palindroom."
fi
```
Versie 2:awk gebruiken (efficiënter)
Deze versie maakt gebruik van `awk`, wat over het algemeen efficiënter is voor numerieke manipulaties, vooral bij grotere getallen.
``` bash
#!/bin/bash
read -p "Voer een getal in:" num
Gebruik awk om het getal om te draaien en te controleren op palindroom
awk -v num="$num" 'BEGIN {
omgekeerd_num ="";
temp_num =getal;
terwijl (temp_num> 0) {
omgekeerd_getal =omgekeerd_getal (temp_num % 10);
temp_num =int(temp_num / 10);
}
if (num ==omgekeerd_num) {
print num " is een palindroom."
} anders {
print num " is geen palindroom."
}
}'
```
Hoe je beide scripts gebruikt:
1. Sla de code op als een bestand (bijvoorbeeld `palindrome.sh`).
2. Maak het uitvoerbaar:`chmod +x palindrome.sh`.
3. Voer het uit:`./palindrome.sh`.
4. Voer een nummer in wanneer daarom wordt gevraagd.
Uitleg van versie 2 (awk):
* `-v num="$num"`:Geeft het invoernummer van de shellvariabele `num` door aan het `awk`-script.
* `BEGIN`:Dit blok wordt uitgevoerd voordat er invoerregels worden verwerkt.
* `reversed_num ="";`:Initialiseert een lege string om het omgekeerde nummer op te slaan.
* `temp_num =num;`:Creëert een tijdelijke kopie van het nummer om te voorkomen dat het origineel wordt gewijzigd.
* `while (temp_num> 0)`:Loopt door totdat het tijdelijke nummer 0 wordt.
* `reversed_num =reversed_num (temp_num % 10);`:Extraheert het laatste cijfer met behulp van de modulo-operator (`%`) en voegt dit toe aan `reversed_num`.
* `temp_num =int(temp_num / 10);`:Verwijdert het laatste cijfer door gehele deling (`/`).
* De laatste `if`-instructie vergelijkt de originele en omgekeerde cijfers en drukt het juiste bericht af.
De `awk`-versie wordt over het algemeen aanbevolen vanwege zijn efficiëntie, vooral als het om grotere aantallen gaat. Kies de versie die het beste bij uw behoeften en shell-omgeving past. Vergeet niet om potentiële fouten (zoals niet-numerieke invoer) af te handelen voor een robuuster script in een productieomgeving. |