This program is suppose to accept a number from the user and print that many prime numbers. For some reason the program doesn't work. I am new to bash scripting and this is my first program. To my eyes everything seems to be correct. Please tell me where I went wrong.
echo Enter num
read n
i=2
j=2
for(( i=2; i <= n; i++ ))
do
for(( j=2; j < i-1; j++ ))
do
if [i % j == 0];
then
break
fi
if [i == j];
then
echo " $i"
fi
done
done
This is the output I get
Enter num
20
prime.sh: line 12: [i: command not found
prime.sh: line 18: [i: command not found
prime.sh: line 12: [i: command not found
prime.sh: line 18: [i: command not found
.
.
.
After making the suggested changes
read -p "Enter a number : " n
i=2
j=2
for(( i=2; i <= n; i++ ))
do
for(( j=2; j <= i-1; j++ ))
do
if [ $(( i % j )) == 0 ]
then
break
fi
if [ i == j ]
then
echo " $i"
fi
done
done
I was able to run the program but it didn't produce any result
updated, after realizing (thanks Will Ness), that all primes up to INPUT are searched.
i needs to run to √(n) only.
You need to place a space after the
[
because[
is an application.And you can't make calculations between the brackets. You will need to tell bash it needs to calculate the values. So you would need to change line 11 to
if (( i % j == 0 ))
.if [i % j == 0];
Should beif [ i % j == 0 ];
Same for the one on line 18
Like the others have said, the
[
program needs a space before its parameters, like all programs need a space before their args. This is one reason why I prefer thetest
builtin to[
with its kludgy syntax requiring a useless]
as the last arg just to make it look pretty and sane.