| Er bestaan verschillende benaderingen voor het vinden van factoren in een UNIX-shellscript. Hier zijn er twee, één die `seq` en `bc` gebruikt (draagbaarder) en een andere die gebruik maakt van de rekenkundige mogelijkheden van bash (iets sneller maar minder draagbaar):
Methode 1:`seq`, `bc` en `grep` gebruiken (draagbaarder)
Deze methode is zeer draagbaar omdat deze afhankelijk is van standaard UNIX-hulpprogramma's.
``` bash
#!/bin/bash
Krijg input van de gebruiker
read -p "Voer een getal in:" num
Foutafhandeling voor niet-positieve invoer
als (( aantal <=0 )); Dan
echo "Voer een positief geheel getal in."
uitgang 1
fi
Genereer getallen van 1 tot num
volg 1 $num | terwijl ik lees; Doen
# Gebruik bc om modulo-bewerking uit te voeren. Hierbij worden grote aantallen verwerkt.
if (( $(echo "$num % $i" | bc) ==0 )); Dan
echo "$i"
fi
klaar
```
Dit script vraagt de gebruiker eerst om een nummer. Vervolgens wordt `seq` gebruikt om een reeks getallen te genereren van 1 tot het ingevoerde getal. De 'while'-lus herhaalt elk getal en 'bc' berekent de modulo. Als de modulo 0 is, is het getal een factor en wordt het afgedrukt.
Methode 2:Bash-rekenkunde gebruiken (minder draagbaar, iets sneller)
Deze methode maakt gebruik van de ingebouwde rekenkundige mogelijkheden van bash, waardoor het iets sneller wordt voor kleinere getallen, maar het is misschien niet zo draagbaar als de `bc`-methode.
``` bash
#!/bin/bash
Krijg input van de gebruiker
read -p "Voer een getal in:" num
Foutafhandeling voor niet-positieve invoer
als (( aantal <=0 )); Dan
echo "Voer een positief geheel getal in."
uitgang 1
fi
Herhaal de getallen van 1 tot num
voor (( i=1; i<=getal; i++ )); Doen
# Controleer of i een factor is met behulp van de modulo-operator
als (( aantal % i ==0 )); Dan
echo "$i"
fi
klaar
```
Dit script is vergelijkbaar met het eerste, maar gebruikt bash's ingebouwde rekenkundige uitbreiding `((...))` voor de modulo-bewerking, waardoor de externe aanroep naar `bc` wordt vermeden.
Hoe uit te voeren:
1. Sla beide scripts op in een bestand (bijvoorbeeld `find_factors.sh`).
2. Maak het script uitvoerbaar:`chmod +x find_factors.sh`
3. Voer het script uit:`./find_factors.sh`
Voorbeelduitvoer (voor ingang 12):
```
1
2
3
4
6
12
```
Vergeet niet de methode te kiezen die het beste past bij uw behoeften en de systemen waarop u het programma gaat gebruiken. De eerste methode (met behulp van `bc`) wordt over het algemeen aanbevolen vanwege de bredere compatibiliteit ervan. De tweede is sneller voor kleinere getallen op systemen waarop de rekenkunde van bash is geoptimaliseerd. |