2016-08-17 7 views
1

Ich bin neu im Skripting. Das folgende Skript prüft, ob eine eingegebene Zahl eine Primzahl oder durch 2 teilbar ist. Warum wird die dritte Zeile von unten benötigt (i = expr $i + 1). Ich habe diese Zeile kommentiert, um zu sehen, was das Skript tun würde und es hängt das Skript auf. Bitte beraten.Prime Number Script Checker

#! /bin/bash 

echo -n "Enter a number: " 
read num 
i=2 

while [ $i -lt $num ] 
do 
    if [ `expr $num % $i` -eq 0 ] 
    then 
     echo "$num is not a prime number" 
     echo "Since it is divisible by $i" 
     exit 
    fi 
    i=`expr $i + 1` 
done 

echo "$num is a prime number " 
+0

Der externe Befehl 'expr' entfällt; Verwenden Sie $ anstelle des Ausdrucks $ num% $ i \ ' – chepner

+0

lernen, 'set -x' (und' set + x') hinzuzufügen, um Debugging ein-/auszuschalten, wo Sie den Wert der Variable sehen, die in jedem Befehl verwendet wird. Sie würden 'expr 2 + 1' zum ersten Mal sehen, wenn die' expr' Zeile ausgeführt wird. Viel Glück. – shellter

Antwort

0

Wenn Sie nicht i erhöhen, dann wird der Test [ $i -lt $num ] nie falsch sein, vorausgesetzt, i beginnt weniger als num.

+0

Ich bekomme es jetzt, wenn die eingegebene Zahl eine Primzahl größer als 2 ist, wird es die Schleife laufen lassen, bis die Variable i gleich der Zahl ist, die eingegeben wurde, den Test falsch machen und drucken, dass die Zahl eine Primzahl ist. –