BASH Program to remove files, Integer expression expected











up vote
1
down vote

favorite












#
# if MAXFILES is not set, set to 10
#

if [ -z "MAXFILES" ]
then
MAXFILES=10
fi

#
# now check to see if the number of files being removed is > MAXFILES
# but only if MAXFILES = 0
#

if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]
then
# if it is, prompt user before removing files
echo "Remove $# files (y/n)? c"
read reply
if [ "$reply" = y ]
then
rm "$@"
else
echo "files not removed"
fi
else
# number of args <= MAXFILES
rm "$@"
fi


The above program I have to remove files. However when I attempt to run it, its telling me that



line 15: [: : integer expression expected










share|improve this question




















  • 5




    You're missing the dollar sign in if [ -z "MAXFILES" ].
    – Mikel
    Dec 2 '14 at 16:36






  • 3




    You can assign variable in easy way: if [ $# -gt "${MAXFILES:=10}" -a "$MAXFILES" -ne 0 ] is enough without above lines
    – Costas
    Dec 2 '14 at 16:45















up vote
1
down vote

favorite












#
# if MAXFILES is not set, set to 10
#

if [ -z "MAXFILES" ]
then
MAXFILES=10
fi

#
# now check to see if the number of files being removed is > MAXFILES
# but only if MAXFILES = 0
#

if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]
then
# if it is, prompt user before removing files
echo "Remove $# files (y/n)? c"
read reply
if [ "$reply" = y ]
then
rm "$@"
else
echo "files not removed"
fi
else
# number of args <= MAXFILES
rm "$@"
fi


The above program I have to remove files. However when I attempt to run it, its telling me that



line 15: [: : integer expression expected










share|improve this question




















  • 5




    You're missing the dollar sign in if [ -z "MAXFILES" ].
    – Mikel
    Dec 2 '14 at 16:36






  • 3




    You can assign variable in easy way: if [ $# -gt "${MAXFILES:=10}" -a "$MAXFILES" -ne 0 ] is enough without above lines
    – Costas
    Dec 2 '14 at 16:45













up vote
1
down vote

favorite









up vote
1
down vote

favorite











#
# if MAXFILES is not set, set to 10
#

if [ -z "MAXFILES" ]
then
MAXFILES=10
fi

#
# now check to see if the number of files being removed is > MAXFILES
# but only if MAXFILES = 0
#

if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]
then
# if it is, prompt user before removing files
echo "Remove $# files (y/n)? c"
read reply
if [ "$reply" = y ]
then
rm "$@"
else
echo "files not removed"
fi
else
# number of args <= MAXFILES
rm "$@"
fi


The above program I have to remove files. However when I attempt to run it, its telling me that



line 15: [: : integer expression expected










share|improve this question















#
# if MAXFILES is not set, set to 10
#

if [ -z "MAXFILES" ]
then
MAXFILES=10
fi

#
# now check to see if the number of files being removed is > MAXFILES
# but only if MAXFILES = 0
#

if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]
then
# if it is, prompt user before removing files
echo "Remove $# files (y/n)? c"
read reply
if [ "$reply" = y ]
then
rm "$@"
else
echo "files not removed"
fi
else
# number of args <= MAXFILES
rm "$@"
fi


The above program I have to remove files. However when I attempt to run it, its telling me that



line 15: [: : integer expression expected







bash






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 25 at 22:44









Rui F Ribeiro

38.3k1477127




38.3k1477127










asked Dec 2 '14 at 16:26









Dport86

111




111








  • 5




    You're missing the dollar sign in if [ -z "MAXFILES" ].
    – Mikel
    Dec 2 '14 at 16:36






  • 3




    You can assign variable in easy way: if [ $# -gt "${MAXFILES:=10}" -a "$MAXFILES" -ne 0 ] is enough without above lines
    – Costas
    Dec 2 '14 at 16:45














  • 5




    You're missing the dollar sign in if [ -z "MAXFILES" ].
    – Mikel
    Dec 2 '14 at 16:36






  • 3




    You can assign variable in easy way: if [ $# -gt "${MAXFILES:=10}" -a "$MAXFILES" -ne 0 ] is enough without above lines
    – Costas
    Dec 2 '14 at 16:45








5




5




You're missing the dollar sign in if [ -z "MAXFILES" ].
– Mikel
Dec 2 '14 at 16:36




You're missing the dollar sign in if [ -z "MAXFILES" ].
– Mikel
Dec 2 '14 at 16:36




3




3




You can assign variable in easy way: if [ $# -gt "${MAXFILES:=10}" -a "$MAXFILES" -ne 0 ] is enough without above lines
– Costas
Dec 2 '14 at 16:45




You can assign variable in easy way: if [ $# -gt "${MAXFILES:=10}" -a "$MAXFILES" -ne 0 ] is enough without above lines
– Costas
Dec 2 '14 at 16:45










1 Answer
1






active

oldest

votes

















up vote
2
down vote













The problem is here:



if [ -z "MAXFILES" ]
then
MAXFILES=10
fi
# ...
if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]


You are checking to see whether the string MAXFILES is zero. Since it's not, $MAXFILES never gets set, and so your later test is lexing as:



if [ $# -gt "" -a "" -ne 0 ]


This is why it's complaining about needing an integer.



What you want to do is this:



if [[ -z "$MAXFILES" ]]; then
MAXFILES=10
fi


The difference is the dollar sign, which you are missing. Also, I tend to use [[ ]] rather than [ ] for tests (when using bash) as they have some nice built-in sanity checks and are more versatile than [ and test.






share|improve this answer





















    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%2f171087%2fbash-program-to-remove-files-integer-expression-expected%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













    The problem is here:



    if [ -z "MAXFILES" ]
    then
    MAXFILES=10
    fi
    # ...
    if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]


    You are checking to see whether the string MAXFILES is zero. Since it's not, $MAXFILES never gets set, and so your later test is lexing as:



    if [ $# -gt "" -a "" -ne 0 ]


    This is why it's complaining about needing an integer.



    What you want to do is this:



    if [[ -z "$MAXFILES" ]]; then
    MAXFILES=10
    fi


    The difference is the dollar sign, which you are missing. Also, I tend to use [[ ]] rather than [ ] for tests (when using bash) as they have some nice built-in sanity checks and are more versatile than [ and test.






    share|improve this answer

























      up vote
      2
      down vote













      The problem is here:



      if [ -z "MAXFILES" ]
      then
      MAXFILES=10
      fi
      # ...
      if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]


      You are checking to see whether the string MAXFILES is zero. Since it's not, $MAXFILES never gets set, and so your later test is lexing as:



      if [ $# -gt "" -a "" -ne 0 ]


      This is why it's complaining about needing an integer.



      What you want to do is this:



      if [[ -z "$MAXFILES" ]]; then
      MAXFILES=10
      fi


      The difference is the dollar sign, which you are missing. Also, I tend to use [[ ]] rather than [ ] for tests (when using bash) as they have some nice built-in sanity checks and are more versatile than [ and test.






      share|improve this answer























        up vote
        2
        down vote










        up vote
        2
        down vote









        The problem is here:



        if [ -z "MAXFILES" ]
        then
        MAXFILES=10
        fi
        # ...
        if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]


        You are checking to see whether the string MAXFILES is zero. Since it's not, $MAXFILES never gets set, and so your later test is lexing as:



        if [ $# -gt "" -a "" -ne 0 ]


        This is why it's complaining about needing an integer.



        What you want to do is this:



        if [[ -z "$MAXFILES" ]]; then
        MAXFILES=10
        fi


        The difference is the dollar sign, which you are missing. Also, I tend to use [[ ]] rather than [ ] for tests (when using bash) as they have some nice built-in sanity checks and are more versatile than [ and test.






        share|improve this answer












        The problem is here:



        if [ -z "MAXFILES" ]
        then
        MAXFILES=10
        fi
        # ...
        if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]


        You are checking to see whether the string MAXFILES is zero. Since it's not, $MAXFILES never gets set, and so your later test is lexing as:



        if [ $# -gt "" -a "" -ne 0 ]


        This is why it's complaining about needing an integer.



        What you want to do is this:



        if [[ -z "$MAXFILES" ]]; then
        MAXFILES=10
        fi


        The difference is the dollar sign, which you are missing. Also, I tend to use [[ ]] rather than [ ] for tests (when using bash) as they have some nice built-in sanity checks and are more versatile than [ and test.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Dec 2 '14 at 17:39









        DopeGhoti

        42.8k55181




        42.8k55181






























            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%2f171087%2fbash-program-to-remove-files-integer-expression-expected%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

            Morgemoulin

            Scott Moir

            Souastre