elif condition in an if statement











up vote
1
down vote

favorite












I have this variables



start=$1;
end=$2;
sn=${#start}
en=${#end}


and this if :



if ( [ $# -eq 2 ] )
then
elif ( [ $sn -ne 3 ] && [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g') " ] );
then
echo "Incorrect format"
exit 1
elif ( [ $en -ne 3 ] && [ -n "$(printf '%sn' "$end" | sed 's/[0-9]//g') " ] );
then
echo "Incorrect format"
exit 1
else
echo "Correct format"
exit 1
fi


and I get unexpected at the first elif , I want to check the arguments provided by the user and they have to be made by only 3 digits .










share|improve this question




















  • 3




    another plug for shellcheck.net here
    – Jeff Schaller
    Nov 28 at 19:04






  • 1




    What is the input that causes your unexpected results, what results are you actually getting, and what results do you want?
    – Jesse_b
    Nov 28 at 19:07












  • I want to have the incorrect format echo on the screen if the provided variables are not 2 digits like 11 , 12 , 55 and echo that the format is correct if there are only 2 digits provided for both arguments .
    – bboy
    Nov 28 at 19:13






  • 1




    You have said you want them to be 3 digits in your question and that you want them to be 2 digits in a comment. Please clarify.
    – Jesse_b
    Nov 28 at 19:24










  • sorry indeed is about 3 digits , the number of arguments is 2
    – bboy
    Nov 28 at 19:35















up vote
1
down vote

favorite












I have this variables



start=$1;
end=$2;
sn=${#start}
en=${#end}


and this if :



if ( [ $# -eq 2 ] )
then
elif ( [ $sn -ne 3 ] && [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g') " ] );
then
echo "Incorrect format"
exit 1
elif ( [ $en -ne 3 ] && [ -n "$(printf '%sn' "$end" | sed 's/[0-9]//g') " ] );
then
echo "Incorrect format"
exit 1
else
echo "Correct format"
exit 1
fi


and I get unexpected at the first elif , I want to check the arguments provided by the user and they have to be made by only 3 digits .










share|improve this question




















  • 3




    another plug for shellcheck.net here
    – Jeff Schaller
    Nov 28 at 19:04






  • 1




    What is the input that causes your unexpected results, what results are you actually getting, and what results do you want?
    – Jesse_b
    Nov 28 at 19:07












  • I want to have the incorrect format echo on the screen if the provided variables are not 2 digits like 11 , 12 , 55 and echo that the format is correct if there are only 2 digits provided for both arguments .
    – bboy
    Nov 28 at 19:13






  • 1




    You have said you want them to be 3 digits in your question and that you want them to be 2 digits in a comment. Please clarify.
    – Jesse_b
    Nov 28 at 19:24










  • sorry indeed is about 3 digits , the number of arguments is 2
    – bboy
    Nov 28 at 19:35













up vote
1
down vote

favorite









up vote
1
down vote

favorite











I have this variables



start=$1;
end=$2;
sn=${#start}
en=${#end}


and this if :



if ( [ $# -eq 2 ] )
then
elif ( [ $sn -ne 3 ] && [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g') " ] );
then
echo "Incorrect format"
exit 1
elif ( [ $en -ne 3 ] && [ -n "$(printf '%sn' "$end" | sed 's/[0-9]//g') " ] );
then
echo "Incorrect format"
exit 1
else
echo "Correct format"
exit 1
fi


and I get unexpected at the first elif , I want to check the arguments provided by the user and they have to be made by only 3 digits .










share|improve this question















I have this variables



start=$1;
end=$2;
sn=${#start}
en=${#end}


and this if :



if ( [ $# -eq 2 ] )
then
elif ( [ $sn -ne 3 ] && [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g') " ] );
then
echo "Incorrect format"
exit 1
elif ( [ $en -ne 3 ] && [ -n "$(printf '%sn' "$end" | sed 's/[0-9]//g') " ] );
then
echo "Incorrect format"
exit 1
else
echo "Correct format"
exit 1
fi


and I get unexpected at the first elif , I want to check the arguments provided by the user and they have to be made by only 3 digits .







bash sed scripting variable






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 28 at 19:11









Jesse_b

11.7k23063




11.7k23063










asked Nov 28 at 18:51









bboy

274




274








  • 3




    another plug for shellcheck.net here
    – Jeff Schaller
    Nov 28 at 19:04






  • 1




    What is the input that causes your unexpected results, what results are you actually getting, and what results do you want?
    – Jesse_b
    Nov 28 at 19:07












  • I want to have the incorrect format echo on the screen if the provided variables are not 2 digits like 11 , 12 , 55 and echo that the format is correct if there are only 2 digits provided for both arguments .
    – bboy
    Nov 28 at 19:13






  • 1




    You have said you want them to be 3 digits in your question and that you want them to be 2 digits in a comment. Please clarify.
    – Jesse_b
    Nov 28 at 19:24










  • sorry indeed is about 3 digits , the number of arguments is 2
    – bboy
    Nov 28 at 19:35














  • 3




    another plug for shellcheck.net here
    – Jeff Schaller
    Nov 28 at 19:04






  • 1




    What is the input that causes your unexpected results, what results are you actually getting, and what results do you want?
    – Jesse_b
    Nov 28 at 19:07












  • I want to have the incorrect format echo on the screen if the provided variables are not 2 digits like 11 , 12 , 55 and echo that the format is correct if there are only 2 digits provided for both arguments .
    – bboy
    Nov 28 at 19:13






  • 1




    You have said you want them to be 3 digits in your question and that you want them to be 2 digits in a comment. Please clarify.
    – Jesse_b
    Nov 28 at 19:24










  • sorry indeed is about 3 digits , the number of arguments is 2
    – bboy
    Nov 28 at 19:35








3




3




another plug for shellcheck.net here
– Jeff Schaller
Nov 28 at 19:04




another plug for shellcheck.net here
– Jeff Schaller
Nov 28 at 19:04




1




1




What is the input that causes your unexpected results, what results are you actually getting, and what results do you want?
– Jesse_b
Nov 28 at 19:07






What is the input that causes your unexpected results, what results are you actually getting, and what results do you want?
– Jesse_b
Nov 28 at 19:07














I want to have the incorrect format echo on the screen if the provided variables are not 2 digits like 11 , 12 , 55 and echo that the format is correct if there are only 2 digits provided for both arguments .
– bboy
Nov 28 at 19:13




I want to have the incorrect format echo on the screen if the provided variables are not 2 digits like 11 , 12 , 55 and echo that the format is correct if there are only 2 digits provided for both arguments .
– bboy
Nov 28 at 19:13




1




1




You have said you want them to be 3 digits in your question and that you want them to be 2 digits in a comment. Please clarify.
– Jesse_b
Nov 28 at 19:24




You have said you want them to be 3 digits in your question and that you want them to be 2 digits in a comment. Please clarify.
– Jesse_b
Nov 28 at 19:24












sorry indeed is about 3 digits , the number of arguments is 2
– bboy
Nov 28 at 19:35




sorry indeed is about 3 digits , the number of arguments is 2
– bboy
Nov 28 at 19:35










2 Answers
2






active

oldest

votes

















up vote
3
down vote



accepted










if ( [ $# -eq 2 ] )
then
elif


As Jeff's answer says, the first if condition is missing the part with the commands. The error messages given by Bash and Dash are a bit vague, it seems like they come directly from the parser, and they haven't bothered to add a more user-friendly message there.



If you don't want to do anything inside a branch, you'll still need to add some command there. I'd suggest true, which doesn't do anything.



Fixing that, shellcheck.net gives a couple of more observations:



if ( [ $# -eq 2 ] )
^-- SC2233: Remove superfluous (..) around condition.


The parenthesis start a subshell, which is not necessary here (and involves extra overhead, like forking a subprocess in Bash).



... [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g') " ] 
>> ^--
SC2157: Argument to -n is always true due to literal strings.


You've quoted the command substitution, good! But you have an extra space there in the end. Whatever the command substitution outputs, the argument to -n will never be empty, because of that space.



(It also notes about quoting $sn and $en, which would be the careful thing to do, but isn't really necessary if you know IFS doesn't contain any digits.)





That said, I'm not sure the conditions still are quite right. You say:




I want to check the arguments provided by the user and they have to be made by only 3 digits .




But note that the test below catches only the case where sn is not three, and in addition there are other characters than numbers, i.e. it passes abc and 1234, and only rejects, say abcd. You want an or condition, ||, instead of and.



if [ $sn -ne 3 ] && [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g')" ]; then
echo reject


Or you could just use case and a pattern match:



case "$start" in
[0-9][0-9][0-9]) echo "'$start' is ok";;
*) echo "'$start' is invalid"; exit 1;;
esac





share|improve this answer























  • Thank you very much , using the case statement helped !
    – bboy
    Nov 28 at 19:45






  • 1




    Or, with bash, if [[ $start != [0-9][0-9][0-9] ]]; then die; fi -- within double brackets, the == and != operators are pattern matching
    – glenn jackman
    Nov 28 at 22:27




















up vote
3
down vote













You don't have any statements in the "true" case of your first if:



if ( [ $# -eq 2 ] )

then
## <-- HERE
elif ...


Quoting the bash manual:




The syntax of the if command is:



if test-commands; then
consequent-commands;
[elif more-test-commands; then
more-consequents;]
[else alternate-consequents;]
fi



Where the important bit is the consequent-commands.






share|improve this answer





















  • After updating the statement no check is done on the provided variables .
    – bboy
    Nov 28 at 19:13






  • 1




    @bboy: That's because you likely don't want to check if there are two arguments, you probably want to check if there is not two arguments.
    – Jesse_b
    Nov 28 at 19:25






  • 1




    Specifically, when using if, you have to do something if the test returns something truthy. If you only want to act when the result is falsy, you must either add a no-op to the consequent-commands, or flip the logic of the test: Either if test; then :; else thing; fi or if ! test; then thing; fi. The same holds true for elif.
    – DopeGhoti
    Nov 28 at 22:20











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
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f484739%2felif-condition-in-an-if-statement%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
3
down vote



accepted










if ( [ $# -eq 2 ] )
then
elif


As Jeff's answer says, the first if condition is missing the part with the commands. The error messages given by Bash and Dash are a bit vague, it seems like they come directly from the parser, and they haven't bothered to add a more user-friendly message there.



If you don't want to do anything inside a branch, you'll still need to add some command there. I'd suggest true, which doesn't do anything.



Fixing that, shellcheck.net gives a couple of more observations:



if ( [ $# -eq 2 ] )
^-- SC2233: Remove superfluous (..) around condition.


The parenthesis start a subshell, which is not necessary here (and involves extra overhead, like forking a subprocess in Bash).



... [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g') " ] 
>> ^--
SC2157: Argument to -n is always true due to literal strings.


You've quoted the command substitution, good! But you have an extra space there in the end. Whatever the command substitution outputs, the argument to -n will never be empty, because of that space.



(It also notes about quoting $sn and $en, which would be the careful thing to do, but isn't really necessary if you know IFS doesn't contain any digits.)





That said, I'm not sure the conditions still are quite right. You say:




I want to check the arguments provided by the user and they have to be made by only 3 digits .




But note that the test below catches only the case where sn is not three, and in addition there are other characters than numbers, i.e. it passes abc and 1234, and only rejects, say abcd. You want an or condition, ||, instead of and.



if [ $sn -ne 3 ] && [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g')" ]; then
echo reject


Or you could just use case and a pattern match:



case "$start" in
[0-9][0-9][0-9]) echo "'$start' is ok";;
*) echo "'$start' is invalid"; exit 1;;
esac





share|improve this answer























  • Thank you very much , using the case statement helped !
    – bboy
    Nov 28 at 19:45






  • 1




    Or, with bash, if [[ $start != [0-9][0-9][0-9] ]]; then die; fi -- within double brackets, the == and != operators are pattern matching
    – glenn jackman
    Nov 28 at 22:27

















up vote
3
down vote



accepted










if ( [ $# -eq 2 ] )
then
elif


As Jeff's answer says, the first if condition is missing the part with the commands. The error messages given by Bash and Dash are a bit vague, it seems like they come directly from the parser, and they haven't bothered to add a more user-friendly message there.



If you don't want to do anything inside a branch, you'll still need to add some command there. I'd suggest true, which doesn't do anything.



Fixing that, shellcheck.net gives a couple of more observations:



if ( [ $# -eq 2 ] )
^-- SC2233: Remove superfluous (..) around condition.


The parenthesis start a subshell, which is not necessary here (and involves extra overhead, like forking a subprocess in Bash).



... [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g') " ] 
>> ^--
SC2157: Argument to -n is always true due to literal strings.


You've quoted the command substitution, good! But you have an extra space there in the end. Whatever the command substitution outputs, the argument to -n will never be empty, because of that space.



(It also notes about quoting $sn and $en, which would be the careful thing to do, but isn't really necessary if you know IFS doesn't contain any digits.)





That said, I'm not sure the conditions still are quite right. You say:




I want to check the arguments provided by the user and they have to be made by only 3 digits .




But note that the test below catches only the case where sn is not three, and in addition there are other characters than numbers, i.e. it passes abc and 1234, and only rejects, say abcd. You want an or condition, ||, instead of and.



if [ $sn -ne 3 ] && [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g')" ]; then
echo reject


Or you could just use case and a pattern match:



case "$start" in
[0-9][0-9][0-9]) echo "'$start' is ok";;
*) echo "'$start' is invalid"; exit 1;;
esac





share|improve this answer























  • Thank you very much , using the case statement helped !
    – bboy
    Nov 28 at 19:45






  • 1




    Or, with bash, if [[ $start != [0-9][0-9][0-9] ]]; then die; fi -- within double brackets, the == and != operators are pattern matching
    – glenn jackman
    Nov 28 at 22:27















up vote
3
down vote



accepted







up vote
3
down vote



accepted






if ( [ $# -eq 2 ] )
then
elif


As Jeff's answer says, the first if condition is missing the part with the commands. The error messages given by Bash and Dash are a bit vague, it seems like they come directly from the parser, and they haven't bothered to add a more user-friendly message there.



If you don't want to do anything inside a branch, you'll still need to add some command there. I'd suggest true, which doesn't do anything.



Fixing that, shellcheck.net gives a couple of more observations:



if ( [ $# -eq 2 ] )
^-- SC2233: Remove superfluous (..) around condition.


The parenthesis start a subshell, which is not necessary here (and involves extra overhead, like forking a subprocess in Bash).



... [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g') " ] 
>> ^--
SC2157: Argument to -n is always true due to literal strings.


You've quoted the command substitution, good! But you have an extra space there in the end. Whatever the command substitution outputs, the argument to -n will never be empty, because of that space.



(It also notes about quoting $sn and $en, which would be the careful thing to do, but isn't really necessary if you know IFS doesn't contain any digits.)





That said, I'm not sure the conditions still are quite right. You say:




I want to check the arguments provided by the user and they have to be made by only 3 digits .




But note that the test below catches only the case where sn is not three, and in addition there are other characters than numbers, i.e. it passes abc and 1234, and only rejects, say abcd. You want an or condition, ||, instead of and.



if [ $sn -ne 3 ] && [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g')" ]; then
echo reject


Or you could just use case and a pattern match:



case "$start" in
[0-9][0-9][0-9]) echo "'$start' is ok";;
*) echo "'$start' is invalid"; exit 1;;
esac





share|improve this answer














if ( [ $# -eq 2 ] )
then
elif


As Jeff's answer says, the first if condition is missing the part with the commands. The error messages given by Bash and Dash are a bit vague, it seems like they come directly from the parser, and they haven't bothered to add a more user-friendly message there.



If you don't want to do anything inside a branch, you'll still need to add some command there. I'd suggest true, which doesn't do anything.



Fixing that, shellcheck.net gives a couple of more observations:



if ( [ $# -eq 2 ] )
^-- SC2233: Remove superfluous (..) around condition.


The parenthesis start a subshell, which is not necessary here (and involves extra overhead, like forking a subprocess in Bash).



... [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g') " ] 
>> ^--
SC2157: Argument to -n is always true due to literal strings.


You've quoted the command substitution, good! But you have an extra space there in the end. Whatever the command substitution outputs, the argument to -n will never be empty, because of that space.



(It also notes about quoting $sn and $en, which would be the careful thing to do, but isn't really necessary if you know IFS doesn't contain any digits.)





That said, I'm not sure the conditions still are quite right. You say:




I want to check the arguments provided by the user and they have to be made by only 3 digits .




But note that the test below catches only the case where sn is not three, and in addition there are other characters than numbers, i.e. it passes abc and 1234, and only rejects, say abcd. You want an or condition, ||, instead of and.



if [ $sn -ne 3 ] && [ -n "$(printf '%sn' "$start" | sed 's/[0-9]//g')" ]; then
echo reject


Or you could just use case and a pattern match:



case "$start" in
[0-9][0-9][0-9]) echo "'$start' is ok";;
*) echo "'$start' is invalid"; exit 1;;
esac






share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 28 at 19:48

























answered Nov 28 at 19:42









ilkkachu

55k782150




55k782150












  • Thank you very much , using the case statement helped !
    – bboy
    Nov 28 at 19:45






  • 1




    Or, with bash, if [[ $start != [0-9][0-9][0-9] ]]; then die; fi -- within double brackets, the == and != operators are pattern matching
    – glenn jackman
    Nov 28 at 22:27




















  • Thank you very much , using the case statement helped !
    – bboy
    Nov 28 at 19:45






  • 1




    Or, with bash, if [[ $start != [0-9][0-9][0-9] ]]; then die; fi -- within double brackets, the == and != operators are pattern matching
    – glenn jackman
    Nov 28 at 22:27


















Thank you very much , using the case statement helped !
– bboy
Nov 28 at 19:45




Thank you very much , using the case statement helped !
– bboy
Nov 28 at 19:45




1




1




Or, with bash, if [[ $start != [0-9][0-9][0-9] ]]; then die; fi -- within double brackets, the == and != operators are pattern matching
– glenn jackman
Nov 28 at 22:27






Or, with bash, if [[ $start != [0-9][0-9][0-9] ]]; then die; fi -- within double brackets, the == and != operators are pattern matching
– glenn jackman
Nov 28 at 22:27














up vote
3
down vote













You don't have any statements in the "true" case of your first if:



if ( [ $# -eq 2 ] )

then
## <-- HERE
elif ...


Quoting the bash manual:




The syntax of the if command is:



if test-commands; then
consequent-commands;
[elif more-test-commands; then
more-consequents;]
[else alternate-consequents;]
fi



Where the important bit is the consequent-commands.






share|improve this answer





















  • After updating the statement no check is done on the provided variables .
    – bboy
    Nov 28 at 19:13






  • 1




    @bboy: That's because you likely don't want to check if there are two arguments, you probably want to check if there is not two arguments.
    – Jesse_b
    Nov 28 at 19:25






  • 1




    Specifically, when using if, you have to do something if the test returns something truthy. If you only want to act when the result is falsy, you must either add a no-op to the consequent-commands, or flip the logic of the test: Either if test; then :; else thing; fi or if ! test; then thing; fi. The same holds true for elif.
    – DopeGhoti
    Nov 28 at 22:20















up vote
3
down vote













You don't have any statements in the "true" case of your first if:



if ( [ $# -eq 2 ] )

then
## <-- HERE
elif ...


Quoting the bash manual:




The syntax of the if command is:



if test-commands; then
consequent-commands;
[elif more-test-commands; then
more-consequents;]
[else alternate-consequents;]
fi



Where the important bit is the consequent-commands.






share|improve this answer





















  • After updating the statement no check is done on the provided variables .
    – bboy
    Nov 28 at 19:13






  • 1




    @bboy: That's because you likely don't want to check if there are two arguments, you probably want to check if there is not two arguments.
    – Jesse_b
    Nov 28 at 19:25






  • 1




    Specifically, when using if, you have to do something if the test returns something truthy. If you only want to act when the result is falsy, you must either add a no-op to the consequent-commands, or flip the logic of the test: Either if test; then :; else thing; fi or if ! test; then thing; fi. The same holds true for elif.
    – DopeGhoti
    Nov 28 at 22:20













up vote
3
down vote










up vote
3
down vote









You don't have any statements in the "true" case of your first if:



if ( [ $# -eq 2 ] )

then
## <-- HERE
elif ...


Quoting the bash manual:




The syntax of the if command is:



if test-commands; then
consequent-commands;
[elif more-test-commands; then
more-consequents;]
[else alternate-consequents;]
fi



Where the important bit is the consequent-commands.






share|improve this answer












You don't have any statements in the "true" case of your first if:



if ( [ $# -eq 2 ] )

then
## <-- HERE
elif ...


Quoting the bash manual:




The syntax of the if command is:



if test-commands; then
consequent-commands;
[elif more-test-commands; then
more-consequents;]
[else alternate-consequents;]
fi



Where the important bit is the consequent-commands.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 28 at 19:03









Jeff Schaller

37.9k1053123




37.9k1053123












  • After updating the statement no check is done on the provided variables .
    – bboy
    Nov 28 at 19:13






  • 1




    @bboy: That's because you likely don't want to check if there are two arguments, you probably want to check if there is not two arguments.
    – Jesse_b
    Nov 28 at 19:25






  • 1




    Specifically, when using if, you have to do something if the test returns something truthy. If you only want to act when the result is falsy, you must either add a no-op to the consequent-commands, or flip the logic of the test: Either if test; then :; else thing; fi or if ! test; then thing; fi. The same holds true for elif.
    – DopeGhoti
    Nov 28 at 22:20


















  • After updating the statement no check is done on the provided variables .
    – bboy
    Nov 28 at 19:13






  • 1




    @bboy: That's because you likely don't want to check if there are two arguments, you probably want to check if there is not two arguments.
    – Jesse_b
    Nov 28 at 19:25






  • 1




    Specifically, when using if, you have to do something if the test returns something truthy. If you only want to act when the result is falsy, you must either add a no-op to the consequent-commands, or flip the logic of the test: Either if test; then :; else thing; fi or if ! test; then thing; fi. The same holds true for elif.
    – DopeGhoti
    Nov 28 at 22:20
















After updating the statement no check is done on the provided variables .
– bboy
Nov 28 at 19:13




After updating the statement no check is done on the provided variables .
– bboy
Nov 28 at 19:13




1




1




@bboy: That's because you likely don't want to check if there are two arguments, you probably want to check if there is not two arguments.
– Jesse_b
Nov 28 at 19:25




@bboy: That's because you likely don't want to check if there are two arguments, you probably want to check if there is not two arguments.
– Jesse_b
Nov 28 at 19:25




1




1




Specifically, when using if, you have to do something if the test returns something truthy. If you only want to act when the result is falsy, you must either add a no-op to the consequent-commands, or flip the logic of the test: Either if test; then :; else thing; fi or if ! test; then thing; fi. The same holds true for elif.
– DopeGhoti
Nov 28 at 22:20




Specifically, when using if, you have to do something if the test returns something truthy. If you only want to act when the result is falsy, you must either add a no-op to the consequent-commands, or flip the logic of the test: Either if test; then :; else thing; fi or if ! test; then thing; fi. The same holds true for elif.
– DopeGhoti
Nov 28 at 22:20


















draft saved

draft discarded




















































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.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f484739%2felif-condition-in-an-if-statement%23new-answer', 'question_page');
}
);

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







Popular posts from this blog

Plaza Victoria

Puebla de Zaragoza

Musa