Bash Conditional String and Integer together
up vote
-1
down vote
favorite
I am trying to do both integer and string comparison in a statement as follows:
$ TimeHr=$(date +%_H)
$ Time=Night
$ echo TimeHr
1
$ if ((TimeHr>18 || TimeHr<5 )) && [ Time == "Night" ]; then echo "Night Time"; else echo "Day Time"; fi
Day Time
$ if ((TimeHr>18 || TimeHr<5 )) && [[ Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
Day Time
But it is not printing the correct if-branch. How should I modify it?
Edit:
I prefer to use ((
for numerical comparisons as the code looks more understandable.
bash shell-script command-line gnu
add a comment |
up vote
-1
down vote
favorite
I am trying to do both integer and string comparison in a statement as follows:
$ TimeHr=$(date +%_H)
$ Time=Night
$ echo TimeHr
1
$ if ((TimeHr>18 || TimeHr<5 )) && [ Time == "Night" ]; then echo "Night Time"; else echo "Day Time"; fi
Day Time
$ if ((TimeHr>18 || TimeHr<5 )) && [[ Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
Day Time
But it is not printing the correct if-branch. How should I modify it?
Edit:
I prefer to use ((
for numerical comparisons as the code looks more understandable.
bash shell-script command-line gnu
Crawl before you leap high hurdles. If your attempt to combine three tests into one doesn't work, try to get a single test working. P.S. For what you're doing, there's no reason to include the_
in+%_H
.
– G-Man
Dec 3 at 16:50
@G-Man I am not sure, but I think I did this to remove the leading 0, to prevent the number to be interpreted as octal form.
– Nikhil
Dec 3 at 17:14
OK, good point; I had overlooked that issue. It looks like+%-H
would work as well.
– G-Man
Dec 3 at 17:38
@G-Man What is the difference between_
and-
here?
– Nikhil
Dec 3 at 17:40
1
_
replaces the leading zero with a space ( 7
),-
simply outputs numbers less than ten as a single digit, with nothing in front.
– G-Man
Dec 3 at 17:43
add a comment |
up vote
-1
down vote
favorite
up vote
-1
down vote
favorite
I am trying to do both integer and string comparison in a statement as follows:
$ TimeHr=$(date +%_H)
$ Time=Night
$ echo TimeHr
1
$ if ((TimeHr>18 || TimeHr<5 )) && [ Time == "Night" ]; then echo "Night Time"; else echo "Day Time"; fi
Day Time
$ if ((TimeHr>18 || TimeHr<5 )) && [[ Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
Day Time
But it is not printing the correct if-branch. How should I modify it?
Edit:
I prefer to use ((
for numerical comparisons as the code looks more understandable.
bash shell-script command-line gnu
I am trying to do both integer and string comparison in a statement as follows:
$ TimeHr=$(date +%_H)
$ Time=Night
$ echo TimeHr
1
$ if ((TimeHr>18 || TimeHr<5 )) && [ Time == "Night" ]; then echo "Night Time"; else echo "Day Time"; fi
Day Time
$ if ((TimeHr>18 || TimeHr<5 )) && [[ Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
Day Time
But it is not printing the correct if-branch. How should I modify it?
Edit:
I prefer to use ((
for numerical comparisons as the code looks more understandable.
bash shell-script command-line gnu
bash shell-script command-line gnu
edited Dec 3 at 0:27
asked Dec 3 at 0:14
Nikhil
23319
23319
Crawl before you leap high hurdles. If your attempt to combine three tests into one doesn't work, try to get a single test working. P.S. For what you're doing, there's no reason to include the_
in+%_H
.
– G-Man
Dec 3 at 16:50
@G-Man I am not sure, but I think I did this to remove the leading 0, to prevent the number to be interpreted as octal form.
– Nikhil
Dec 3 at 17:14
OK, good point; I had overlooked that issue. It looks like+%-H
would work as well.
– G-Man
Dec 3 at 17:38
@G-Man What is the difference between_
and-
here?
– Nikhil
Dec 3 at 17:40
1
_
replaces the leading zero with a space ( 7
),-
simply outputs numbers less than ten as a single digit, with nothing in front.
– G-Man
Dec 3 at 17:43
add a comment |
Crawl before you leap high hurdles. If your attempt to combine three tests into one doesn't work, try to get a single test working. P.S. For what you're doing, there's no reason to include the_
in+%_H
.
– G-Man
Dec 3 at 16:50
@G-Man I am not sure, but I think I did this to remove the leading 0, to prevent the number to be interpreted as octal form.
– Nikhil
Dec 3 at 17:14
OK, good point; I had overlooked that issue. It looks like+%-H
would work as well.
– G-Man
Dec 3 at 17:38
@G-Man What is the difference between_
and-
here?
– Nikhil
Dec 3 at 17:40
1
_
replaces the leading zero with a space ( 7
),-
simply outputs numbers less than ten as a single digit, with nothing in front.
– G-Man
Dec 3 at 17:43
Crawl before you leap high hurdles. If your attempt to combine three tests into one doesn't work, try to get a single test working. P.S. For what you're doing, there's no reason to include the
_
in +%_H
.– G-Man
Dec 3 at 16:50
Crawl before you leap high hurdles. If your attempt to combine three tests into one doesn't work, try to get a single test working. P.S. For what you're doing, there's no reason to include the
_
in +%_H
.– G-Man
Dec 3 at 16:50
@G-Man I am not sure, but I think I did this to remove the leading 0, to prevent the number to be interpreted as octal form.
– Nikhil
Dec 3 at 17:14
@G-Man I am not sure, but I think I did this to remove the leading 0, to prevent the number to be interpreted as octal form.
– Nikhil
Dec 3 at 17:14
OK, good point; I had overlooked that issue. It looks like
+%-H
would work as well.– G-Man
Dec 3 at 17:38
OK, good point; I had overlooked that issue. It looks like
+%-H
would work as well.– G-Man
Dec 3 at 17:38
@G-Man What is the difference between
_
and -
here?– Nikhil
Dec 3 at 17:40
@G-Man What is the difference between
_
and -
here?– Nikhil
Dec 3 at 17:40
1
1
_
replaces the leading zero with a space ( 7
), -
simply outputs numbers less than ten as a single digit, with nothing in front.– G-Man
Dec 3 at 17:43
_
replaces the leading zero with a space ( 7
), -
simply outputs numbers less than ten as a single digit, with nothing in front.– G-Man
Dec 3 at 17:43
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
accepted
I would combine the two conditionals into a single one
if [[ ( $TimeHr -gt 18 || $TimeHr -lt 5 ) && $Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
Night Time
However your original test has a simple error; inside the [
and [[
tests you need to use $variable
and not just variable
.
So
if ((TimeHr>18 || TimeHr<5 )) && [[ $Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
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',
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
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%2funix.stackexchange.com%2fquestions%2f485589%2fbash-conditional-string-and-integer-together%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
I would combine the two conditionals into a single one
if [[ ( $TimeHr -gt 18 || $TimeHr -lt 5 ) && $Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
Night Time
However your original test has a simple error; inside the [
and [[
tests you need to use $variable
and not just variable
.
So
if ((TimeHr>18 || TimeHr<5 )) && [[ $Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
add a comment |
up vote
2
down vote
accepted
I would combine the two conditionals into a single one
if [[ ( $TimeHr -gt 18 || $TimeHr -lt 5 ) && $Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
Night Time
However your original test has a simple error; inside the [
and [[
tests you need to use $variable
and not just variable
.
So
if ((TimeHr>18 || TimeHr<5 )) && [[ $Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
add a comment |
up vote
2
down vote
accepted
up vote
2
down vote
accepted
I would combine the two conditionals into a single one
if [[ ( $TimeHr -gt 18 || $TimeHr -lt 5 ) && $Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
Night Time
However your original test has a simple error; inside the [
and [[
tests you need to use $variable
and not just variable
.
So
if ((TimeHr>18 || TimeHr<5 )) && [[ $Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
I would combine the two conditionals into a single one
if [[ ( $TimeHr -gt 18 || $TimeHr -lt 5 ) && $Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
Night Time
However your original test has a simple error; inside the [
and [[
tests you need to use $variable
and not just variable
.
So
if ((TimeHr>18 || TimeHr<5 )) && [[ $Time == "Night" ]]; then echo "Night Time"; else echo "Day Time"; fi
answered Dec 3 at 0:24
Stephen Harris
24k24477
24k24477
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- 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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2funix.stackexchange.com%2fquestions%2f485589%2fbash-conditional-string-and-integer-together%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
Crawl before you leap high hurdles. If your attempt to combine three tests into one doesn't work, try to get a single test working. P.S. For what you're doing, there's no reason to include the
_
in+%_H
.– G-Man
Dec 3 at 16:50
@G-Man I am not sure, but I think I did this to remove the leading 0, to prevent the number to be interpreted as octal form.
– Nikhil
Dec 3 at 17:14
OK, good point; I had overlooked that issue. It looks like
+%-H
would work as well.– G-Man
Dec 3 at 17:38
@G-Man What is the difference between
_
and-
here?– Nikhil
Dec 3 at 17:40
1
_
replaces the leading zero with a space ( 7
),-
simply outputs numbers less than ten as a single digit, with nothing in front.– G-Man
Dec 3 at 17:43