check even number - OK
if [ $(( $n % 2 )) -eq 0 ]
then
echo "$n is even number"
fi
how to check odd number ?
if [ $(( $n % ????? )) -eq 0 ]
then
echo "$n is odd number"
fi
Thank
Use "not equal 0":
if [ $(( $n % 2)) -ne 0 ]
then
echo "$n is odd"
fi
See also: http://tldp.org/LDP/abs/html/comparison-ops.html
You can also use "n%2 equals 1" since the remainder of an odd number divided by two is one:
if [ $(( $1 % 2)) -eq 1 ]
then
echo "$1 is odd"
fi
But the former (not equal 0) is the more general case, so I would prefer it.
All the answers above use a single square bracket [ which is outdated in bash (we're talking about bash, right?). The best practice to achieve the determination of an odd or even number n is:
if (( n%2==0 )); then
printf "%d is even\n" $n
else
printf "%d is odd\n" $n
fi
or, as the OP wants it, i.e., check if n is odd:
if (( n%2 )); then
printf "%d is odd\n" $n
fi
echo -n "Enter numnber : "
read n
rem=$(( $n % 2 ))
if [ $rem -eq 0 ]then
echo "$n is even number"
else
echo "$n is odd number"
fi
I prefer the simplicity of:
x=8; ((x%2)) || echo even
x=7; ((x%2)) && echo odd
Related
How to keep track of how many guesses the user makes and print a message that tells them they lose? Exit after 5 guesses.
num=$(( $RANDOM % 100 + 1 ))
while [ "$input" -ne "$num" ]; do
if [ "$input" -gt "$num" ]; then
echo "The number is too high."
read input
elif [ "$input" -lt "$num" ]; then
echo "The number is too low."
read input
fi
done
echo "Great, you picked the right number."
Would you please try the following:
#!/bin/bash
num=$(( $RANDOM % 100 + 1 ))
for (( i = 0; i < 5; i++ )); do
read -p "Enter a number: " input
if (( input == num )); then
echo "Great, you picked the right number."
break
elif (( input > num )); then
echo "The number is too high."
elif (( input < num )); then
echo "The number is too low."
fi
done
BTW I tested the script by modifying the random number generator to $RANDOM % 10 + 1 but still not easy :).
I want to print prime numbers using for loop in shell script. Please provide some suggestions.
actually I could able to print odd numbers from range of 1 to 100, but now I am unable to print prime numbers. Provide some script to print prime numbers
# cat prime.sh
#!/bin/bash
for ((i=1; i<=100; i++))
do
output=$(( $i % 2))
if [ $output -ne 0 ]
then
echo "We got odd numbers: $i"
fi
done
The below code returns the list of prime numbers within a specified range.
the below command returns the prime numbers between 10 to 30
./filename.sh 10 30
#!/bin/bash
# Check if a number is prime
# function to return whether prime or not
check_prime() {
current_number=$1
flag=0
i=2
while test $i -le `expr $current_number / 2`
do
if test `expr $current_number % $i` -eq 0
then
flag=1
fi
i=`expr $i + 1`
done
if test $flag -eq 0
then echo $current_number
fi
}
# Assign From and to number
from_number=$1
to_number=$2
for (( number=$from_number; number<=$to_number; number++ ))
do
check_prime $number
done
This code will Print all prime numbers upto given number & also print count of it
hope it helps !!
#!/bin/bash
echo "enter a number upto which you want the prime numbers"
read num
count=0
for (( n=2; n<=$num; n++ ))
do
t=1
if [ $n -lt 2 ]
then echo "Please give other numbers than 0 and 1"
else
#echo $n
for (( i=2; i<$n; i++ ))
do
#echo $n
if (($n%i==0))
then
#echo "$n is not prime number"
t=0
break;
fi
done
#echo $t
if [ $t == 1 ]
then
echo "$n is a prime number"
count=`expr $count + 1`
fi
fi
done
echo "Total prime numbers upto $num are $count "
echo 'Enter no'
read x
n=2
while [ $n -le $x ]
do
i=2
count=1
while [ $i -lt $n ]
do
if [ `expr $n % $i` -eq 0 ]
then
count=0
break
fi
i=`expr $i + 1`
done
if [ $count -eq 1 ]
then
echo "$n is Prime"
fi
n=`expr $n + 1`
done
It is not really a counter, just a flag.
If any modulus operation returned a 0, then the value is not prime. The flag is set so that after the inner loop completes, you can see that the value was not prime.
If the value never was divisible, then the counter flag was never reset to 0, so you know it is prime.
I am a newbie .Please help me with this
The output says syntax error near unexpected token 'do'
The code is
if [ $# -eq 0 ];
then
echo "Command line arguments are missing."
else
n=$1
sum=0
while[ $n -gt 0 ]
do
rem=$(( $n % 10 ))
sum=$(( $sum + $rem ))
n=$(( $n / 10 ))
done
echo "Sum of digit for given number is $sum "
fi
A whitespace after while. Try this out:
if [ $# -eq 0 ];
then
echo Command line arguments are missing.
else
n=$1
sum=0
while [ $n -gt 0 ];
do
rem=$(( $n % 10 ))
sum=$(( $sum + $rem ))
n=$(( $n / 10 ))
done
echo "Sum of digit for given number is $sum"
fi
Put spaces before and after [ and ].
You can replace the while-loop with
sum=$(( $(echo $1| sed 's/./&+/g; s/+$//' ) ))
I am new to scripting. The script below checks if a number inputted is a prime number or divisible by 2. Why is the third line from the bottom needed (i=expr $i + 1). I commented that line out to see what the script would do and it hangs the script up. Please advise.
#! /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 "
If you don't increment i, then the test [ $i -lt $num ] will never be false, assuming i starts out less than num.