How do I exit BASH while loop using modulus operator?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
So practically for my assignment I need to break out of a true while loop when the user inputs a number that gives a modulus remainder of 0, ex: (25 % 5 = 0 break loop) Where in my attempt below have I gone wrong?
while true
do
echo "Please input anything here: "
read INPUT
if [ `expr $INPUT % 5` -eq 0 ]; then
echo "you entered wrong"
else
echo "you entered right"
break
fi
done
command-line bash scripts
add a comment |
So practically for my assignment I need to break out of a true while loop when the user inputs a number that gives a modulus remainder of 0, ex: (25 % 5 = 0 break loop) Where in my attempt below have I gone wrong?
while true
do
echo "Please input anything here: "
read INPUT
if [ `expr $INPUT % 5` -eq 0 ]; then
echo "you entered wrong"
else
echo "you entered right"
break
fi
done
command-line bash scripts
2
If the assignment specifiesbash
, then you might consider using its built-in arithmetic expansion syntax e.g.(( INPUT % 5 == 0 ))
– steeldriver
Apr 2 at 18:45
the loop does not end when entering 25 @steeldriver
– Roosevelt Mendieta
Apr 2 at 18:50
add a comment |
So practically for my assignment I need to break out of a true while loop when the user inputs a number that gives a modulus remainder of 0, ex: (25 % 5 = 0 break loop) Where in my attempt below have I gone wrong?
while true
do
echo "Please input anything here: "
read INPUT
if [ `expr $INPUT % 5` -eq 0 ]; then
echo "you entered wrong"
else
echo "you entered right"
break
fi
done
command-line bash scripts
So practically for my assignment I need to break out of a true while loop when the user inputs a number that gives a modulus remainder of 0, ex: (25 % 5 = 0 break loop) Where in my attempt below have I gone wrong?
while true
do
echo "Please input anything here: "
read INPUT
if [ `expr $INPUT % 5` -eq 0 ]; then
echo "you entered wrong"
else
echo "you entered right"
break
fi
done
command-line bash scripts
command-line bash scripts
edited Apr 2 at 19:09
Roosevelt Mendieta
asked Apr 2 at 18:04
Roosevelt MendietaRoosevelt Mendieta
4915
4915
2
If the assignment specifiesbash
, then you might consider using its built-in arithmetic expansion syntax e.g.(( INPUT % 5 == 0 ))
– steeldriver
Apr 2 at 18:45
the loop does not end when entering 25 @steeldriver
– Roosevelt Mendieta
Apr 2 at 18:50
add a comment |
2
If the assignment specifiesbash
, then you might consider using its built-in arithmetic expansion syntax e.g.(( INPUT % 5 == 0 ))
– steeldriver
Apr 2 at 18:45
the loop does not end when entering 25 @steeldriver
– Roosevelt Mendieta
Apr 2 at 18:50
2
2
If the assignment specifies
bash
, then you might consider using its built-in arithmetic expansion syntax e.g. (( INPUT % 5 == 0 ))
– steeldriver
Apr 2 at 18:45
If the assignment specifies
bash
, then you might consider using its built-in arithmetic expansion syntax e.g. (( INPUT % 5 == 0 ))
– steeldriver
Apr 2 at 18:45
the loop does not end when entering 25 @steeldriver
– Roosevelt Mendieta
Apr 2 at 18:50
the loop does not end when entering 25 @steeldriver
– Roosevelt Mendieta
Apr 2 at 18:50
add a comment |
4 Answers
4
active
oldest
votes
Move the break
from the else
part to the if
part:
#!/bin/bash
while true
do
echo "Please input anything here: "
read INPUT
if [ `expr $INPUT % 5` -eq 0 ]; then
echo "you entered wrong"
break
else
echo "you entered right"
fi
done
this doesn't work, when I enter 40 the code exits
– Roosevelt Mendieta
Apr 2 at 18:46
6
@RooseveltMendieta Isn't it what you want? I need to break out of a true while loop when the user inputs a number that gives a modulus remainder of 0. 40%5 is also 0.
– Kulfy
Apr 2 at 18:58
2
@Kulfy i was thinking of division in my head instead of modulus, how embarrassing lol yes this solution in fact does work and is exactly what I needed. I need to go to sleep i've been up to late working on this assignment.
– Roosevelt Mendieta
Apr 2 at 19:04
@RooseveltMendieta It seems that you changed the original code in your question. So, PerlDuck might need to modify explanation of the answer.
– Kulfy
Apr 2 at 19:07
i version controlled the code back to it's original state @Kulfy
– Roosevelt Mendieta
Apr 2 at 19:10
add a comment |
It works for me according to @steeldriver's tips,
make sure you use
bash
#!/bin/bash
use the bash syntax for arithmetic evaluation
((...))
Otherwise the shellscript can remain the same,
#!/bin/bash
while true
do
echo "Please input anything here: "
read INPUT
if (( INPUT % 5 == 0 )) ; then
echo "you entered right"
break
else
echo "you entered wrong"
fi
done
Edit: You have modified the question. This answer corresponds to a previous version of the question. (It is not clear to me, if you want to break the loop, when there is no remainder or when there is a remainder.)
add a comment |
Since this is bash
script we're talking about, you may want to use read -p
and arithmetic evaluation ((...))
$ while read -p "Enter number:" input ; do (( input%5 == 0 )) && { echo "Wrong"; break;} || echo "alright"; done
Enter number:11
alright
Enter number:7
alright
Enter number:10
Wrong
Portably, you might want to use [
aka test
$ [ $((25%5)) -eq 0 ] && echo "Zero"
Zero
$ [ $((26%5)) -eq 0 ] && echo "Zero"
$
add a comment |
There is also an example for trap's usage in Bash-Beginners-Guide
You can use trap to catch signal to exit your process or whatever you want.
#!/bin/bash
# traptest.sh
trap "echo Booh!;exit" SIGINT SIGTERM
echo "pid is $$"
while : # This is the same as "while true".
do
sleep 60 # This script is not really doing anything.
done
New contributor
3
OP's question is basically an assignment, so they do have to use modulo operator and arithmetic, so your answer misses that. Since you're new on the site, I won't downvote the answer, but I suggest you address that part soon. There's many other ways in which you could do arithmetic in Bash, so consider addressing one of them not already mentioned
– Sergiy Kolodyazhnyy
2 days ago
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "89"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1130696%2fhow-do-i-exit-bash-while-loop-using-modulus-operator%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
Move the break
from the else
part to the if
part:
#!/bin/bash
while true
do
echo "Please input anything here: "
read INPUT
if [ `expr $INPUT % 5` -eq 0 ]; then
echo "you entered wrong"
break
else
echo "you entered right"
fi
done
this doesn't work, when I enter 40 the code exits
– Roosevelt Mendieta
Apr 2 at 18:46
6
@RooseveltMendieta Isn't it what you want? I need to break out of a true while loop when the user inputs a number that gives a modulus remainder of 0. 40%5 is also 0.
– Kulfy
Apr 2 at 18:58
2
@Kulfy i was thinking of division in my head instead of modulus, how embarrassing lol yes this solution in fact does work and is exactly what I needed. I need to go to sleep i've been up to late working on this assignment.
– Roosevelt Mendieta
Apr 2 at 19:04
@RooseveltMendieta It seems that you changed the original code in your question. So, PerlDuck might need to modify explanation of the answer.
– Kulfy
Apr 2 at 19:07
i version controlled the code back to it's original state @Kulfy
– Roosevelt Mendieta
Apr 2 at 19:10
add a comment |
Move the break
from the else
part to the if
part:
#!/bin/bash
while true
do
echo "Please input anything here: "
read INPUT
if [ `expr $INPUT % 5` -eq 0 ]; then
echo "you entered wrong"
break
else
echo "you entered right"
fi
done
this doesn't work, when I enter 40 the code exits
– Roosevelt Mendieta
Apr 2 at 18:46
6
@RooseveltMendieta Isn't it what you want? I need to break out of a true while loop when the user inputs a number that gives a modulus remainder of 0. 40%5 is also 0.
– Kulfy
Apr 2 at 18:58
2
@Kulfy i was thinking of division in my head instead of modulus, how embarrassing lol yes this solution in fact does work and is exactly what I needed. I need to go to sleep i've been up to late working on this assignment.
– Roosevelt Mendieta
Apr 2 at 19:04
@RooseveltMendieta It seems that you changed the original code in your question. So, PerlDuck might need to modify explanation of the answer.
– Kulfy
Apr 2 at 19:07
i version controlled the code back to it's original state @Kulfy
– Roosevelt Mendieta
Apr 2 at 19:10
add a comment |
Move the break
from the else
part to the if
part:
#!/bin/bash
while true
do
echo "Please input anything here: "
read INPUT
if [ `expr $INPUT % 5` -eq 0 ]; then
echo "you entered wrong"
break
else
echo "you entered right"
fi
done
Move the break
from the else
part to the if
part:
#!/bin/bash
while true
do
echo "Please input anything here: "
read INPUT
if [ `expr $INPUT % 5` -eq 0 ]; then
echo "you entered wrong"
break
else
echo "you entered right"
fi
done
answered Apr 2 at 18:16
PerlDuckPerlDuck
7,98611636
7,98611636
this doesn't work, when I enter 40 the code exits
– Roosevelt Mendieta
Apr 2 at 18:46
6
@RooseveltMendieta Isn't it what you want? I need to break out of a true while loop when the user inputs a number that gives a modulus remainder of 0. 40%5 is also 0.
– Kulfy
Apr 2 at 18:58
2
@Kulfy i was thinking of division in my head instead of modulus, how embarrassing lol yes this solution in fact does work and is exactly what I needed. I need to go to sleep i've been up to late working on this assignment.
– Roosevelt Mendieta
Apr 2 at 19:04
@RooseveltMendieta It seems that you changed the original code in your question. So, PerlDuck might need to modify explanation of the answer.
– Kulfy
Apr 2 at 19:07
i version controlled the code back to it's original state @Kulfy
– Roosevelt Mendieta
Apr 2 at 19:10
add a comment |
this doesn't work, when I enter 40 the code exits
– Roosevelt Mendieta
Apr 2 at 18:46
6
@RooseveltMendieta Isn't it what you want? I need to break out of a true while loop when the user inputs a number that gives a modulus remainder of 0. 40%5 is also 0.
– Kulfy
Apr 2 at 18:58
2
@Kulfy i was thinking of division in my head instead of modulus, how embarrassing lol yes this solution in fact does work and is exactly what I needed. I need to go to sleep i've been up to late working on this assignment.
– Roosevelt Mendieta
Apr 2 at 19:04
@RooseveltMendieta It seems that you changed the original code in your question. So, PerlDuck might need to modify explanation of the answer.
– Kulfy
Apr 2 at 19:07
i version controlled the code back to it's original state @Kulfy
– Roosevelt Mendieta
Apr 2 at 19:10
this doesn't work, when I enter 40 the code exits
– Roosevelt Mendieta
Apr 2 at 18:46
this doesn't work, when I enter 40 the code exits
– Roosevelt Mendieta
Apr 2 at 18:46
6
6
@RooseveltMendieta Isn't it what you want? I need to break out of a true while loop when the user inputs a number that gives a modulus remainder of 0. 40%5 is also 0.
– Kulfy
Apr 2 at 18:58
@RooseveltMendieta Isn't it what you want? I need to break out of a true while loop when the user inputs a number that gives a modulus remainder of 0. 40%5 is also 0.
– Kulfy
Apr 2 at 18:58
2
2
@Kulfy i was thinking of division in my head instead of modulus, how embarrassing lol yes this solution in fact does work and is exactly what I needed. I need to go to sleep i've been up to late working on this assignment.
– Roosevelt Mendieta
Apr 2 at 19:04
@Kulfy i was thinking of division in my head instead of modulus, how embarrassing lol yes this solution in fact does work and is exactly what I needed. I need to go to sleep i've been up to late working on this assignment.
– Roosevelt Mendieta
Apr 2 at 19:04
@RooseveltMendieta It seems that you changed the original code in your question. So, PerlDuck might need to modify explanation of the answer.
– Kulfy
Apr 2 at 19:07
@RooseveltMendieta It seems that you changed the original code in your question. So, PerlDuck might need to modify explanation of the answer.
– Kulfy
Apr 2 at 19:07
i version controlled the code back to it's original state @Kulfy
– Roosevelt Mendieta
Apr 2 at 19:10
i version controlled the code back to it's original state @Kulfy
– Roosevelt Mendieta
Apr 2 at 19:10
add a comment |
It works for me according to @steeldriver's tips,
make sure you use
bash
#!/bin/bash
use the bash syntax for arithmetic evaluation
((...))
Otherwise the shellscript can remain the same,
#!/bin/bash
while true
do
echo "Please input anything here: "
read INPUT
if (( INPUT % 5 == 0 )) ; then
echo "you entered right"
break
else
echo "you entered wrong"
fi
done
Edit: You have modified the question. This answer corresponds to a previous version of the question. (It is not clear to me, if you want to break the loop, when there is no remainder or when there is a remainder.)
add a comment |
It works for me according to @steeldriver's tips,
make sure you use
bash
#!/bin/bash
use the bash syntax for arithmetic evaluation
((...))
Otherwise the shellscript can remain the same,
#!/bin/bash
while true
do
echo "Please input anything here: "
read INPUT
if (( INPUT % 5 == 0 )) ; then
echo "you entered right"
break
else
echo "you entered wrong"
fi
done
Edit: You have modified the question. This answer corresponds to a previous version of the question. (It is not clear to me, if you want to break the loop, when there is no remainder or when there is a remainder.)
add a comment |
It works for me according to @steeldriver's tips,
make sure you use
bash
#!/bin/bash
use the bash syntax for arithmetic evaluation
((...))
Otherwise the shellscript can remain the same,
#!/bin/bash
while true
do
echo "Please input anything here: "
read INPUT
if (( INPUT % 5 == 0 )) ; then
echo "you entered right"
break
else
echo "you entered wrong"
fi
done
Edit: You have modified the question. This answer corresponds to a previous version of the question. (It is not clear to me, if you want to break the loop, when there is no remainder or when there is a remainder.)
It works for me according to @steeldriver's tips,
make sure you use
bash
#!/bin/bash
use the bash syntax for arithmetic evaluation
((...))
Otherwise the shellscript can remain the same,
#!/bin/bash
while true
do
echo "Please input anything here: "
read INPUT
if (( INPUT % 5 == 0 )) ; then
echo "you entered right"
break
else
echo "you entered wrong"
fi
done
Edit: You have modified the question. This answer corresponds to a previous version of the question. (It is not clear to me, if you want to break the loop, when there is no remainder or when there is a remainder.)
edited Apr 2 at 19:14
answered Apr 2 at 19:03
sudodussudodus
25.7k33078
25.7k33078
add a comment |
add a comment |
Since this is bash
script we're talking about, you may want to use read -p
and arithmetic evaluation ((...))
$ while read -p "Enter number:" input ; do (( input%5 == 0 )) && { echo "Wrong"; break;} || echo "alright"; done
Enter number:11
alright
Enter number:7
alright
Enter number:10
Wrong
Portably, you might want to use [
aka test
$ [ $((25%5)) -eq 0 ] && echo "Zero"
Zero
$ [ $((26%5)) -eq 0 ] && echo "Zero"
$
add a comment |
Since this is bash
script we're talking about, you may want to use read -p
and arithmetic evaluation ((...))
$ while read -p "Enter number:" input ; do (( input%5 == 0 )) && { echo "Wrong"; break;} || echo "alright"; done
Enter number:11
alright
Enter number:7
alright
Enter number:10
Wrong
Portably, you might want to use [
aka test
$ [ $((25%5)) -eq 0 ] && echo "Zero"
Zero
$ [ $((26%5)) -eq 0 ] && echo "Zero"
$
add a comment |
Since this is bash
script we're talking about, you may want to use read -p
and arithmetic evaluation ((...))
$ while read -p "Enter number:" input ; do (( input%5 == 0 )) && { echo "Wrong"; break;} || echo "alright"; done
Enter number:11
alright
Enter number:7
alright
Enter number:10
Wrong
Portably, you might want to use [
aka test
$ [ $((25%5)) -eq 0 ] && echo "Zero"
Zero
$ [ $((26%5)) -eq 0 ] && echo "Zero"
$
Since this is bash
script we're talking about, you may want to use read -p
and arithmetic evaluation ((...))
$ while read -p "Enter number:" input ; do (( input%5 == 0 )) && { echo "Wrong"; break;} || echo "alright"; done
Enter number:11
alright
Enter number:7
alright
Enter number:10
Wrong
Portably, you might want to use [
aka test
$ [ $((25%5)) -eq 0 ] && echo "Zero"
Zero
$ [ $((26%5)) -eq 0 ] && echo "Zero"
$
edited Apr 2 at 18:59
answered Apr 2 at 18:54
Sergiy KolodyazhnyySergiy Kolodyazhnyy
75k9155326
75k9155326
add a comment |
add a comment |
There is also an example for trap's usage in Bash-Beginners-Guide
You can use trap to catch signal to exit your process or whatever you want.
#!/bin/bash
# traptest.sh
trap "echo Booh!;exit" SIGINT SIGTERM
echo "pid is $$"
while : # This is the same as "while true".
do
sleep 60 # This script is not really doing anything.
done
New contributor
3
OP's question is basically an assignment, so they do have to use modulo operator and arithmetic, so your answer misses that. Since you're new on the site, I won't downvote the answer, but I suggest you address that part soon. There's many other ways in which you could do arithmetic in Bash, so consider addressing one of them not already mentioned
– Sergiy Kolodyazhnyy
2 days ago
add a comment |
There is also an example for trap's usage in Bash-Beginners-Guide
You can use trap to catch signal to exit your process or whatever you want.
#!/bin/bash
# traptest.sh
trap "echo Booh!;exit" SIGINT SIGTERM
echo "pid is $$"
while : # This is the same as "while true".
do
sleep 60 # This script is not really doing anything.
done
New contributor
3
OP's question is basically an assignment, so they do have to use modulo operator and arithmetic, so your answer misses that. Since you're new on the site, I won't downvote the answer, but I suggest you address that part soon. There's many other ways in which you could do arithmetic in Bash, so consider addressing one of them not already mentioned
– Sergiy Kolodyazhnyy
2 days ago
add a comment |
There is also an example for trap's usage in Bash-Beginners-Guide
You can use trap to catch signal to exit your process or whatever you want.
#!/bin/bash
# traptest.sh
trap "echo Booh!;exit" SIGINT SIGTERM
echo "pid is $$"
while : # This is the same as "while true".
do
sleep 60 # This script is not really doing anything.
done
New contributor
There is also an example for trap's usage in Bash-Beginners-Guide
You can use trap to catch signal to exit your process or whatever you want.
#!/bin/bash
# traptest.sh
trap "echo Booh!;exit" SIGINT SIGTERM
echo "pid is $$"
while : # This is the same as "while true".
do
sleep 60 # This script is not really doing anything.
done
New contributor
New contributor
answered 2 days ago
ChingKun YuChingKun Yu
1
1
New contributor
New contributor
3
OP's question is basically an assignment, so they do have to use modulo operator and arithmetic, so your answer misses that. Since you're new on the site, I won't downvote the answer, but I suggest you address that part soon. There's many other ways in which you could do arithmetic in Bash, so consider addressing one of them not already mentioned
– Sergiy Kolodyazhnyy
2 days ago
add a comment |
3
OP's question is basically an assignment, so they do have to use modulo operator and arithmetic, so your answer misses that. Since you're new on the site, I won't downvote the answer, but I suggest you address that part soon. There's many other ways in which you could do arithmetic in Bash, so consider addressing one of them not already mentioned
– Sergiy Kolodyazhnyy
2 days ago
3
3
OP's question is basically an assignment, so they do have to use modulo operator and arithmetic, so your answer misses that. Since you're new on the site, I won't downvote the answer, but I suggest you address that part soon. There's many other ways in which you could do arithmetic in Bash, so consider addressing one of them not already mentioned
– Sergiy Kolodyazhnyy
2 days ago
OP's question is basically an assignment, so they do have to use modulo operator and arithmetic, so your answer misses that. Since you're new on the site, I won't downvote the answer, but I suggest you address that part soon. There's many other ways in which you could do arithmetic in Bash, so consider addressing one of them not already mentioned
– Sergiy Kolodyazhnyy
2 days ago
add a comment |
Thanks for contributing an answer to Ask Ubuntu!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1130696%2fhow-do-i-exit-bash-while-loop-using-modulus-operator%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
If the assignment specifies
bash
, then you might consider using its built-in arithmetic expansion syntax e.g.(( INPUT % 5 == 0 ))
– steeldriver
Apr 2 at 18:45
the loop does not end when entering 25 @steeldriver
– Roosevelt Mendieta
Apr 2 at 18:50