Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Shell Script Too Many Arguments for if condition

My current script does the following;

It takes integer as a command line argument and starts from 1 to N , it checks whether the numbers are divisible by 3, 5 or both of them. It simply prints out Uc for 3, Bes for 5 and UcBes for 3,5. If the command line argument is empty, it does the same operation but the loop goes to 1 to 20.

I am having this error "Too many arguments at line 11,15 and 19".

Here is the code:

#!/bin/bash

if [ ! -z $1 ]; then
    for i in `seq 1 $1`
    do
        if [ [$i % 3] -eq 0 ]; then
            echo "Uc"
        elif [ i % 5 -eq 0 ]; then
            echo "Bes"
        elif [ i % 3 -eq 0 ] && [ i % 5 -eq 0 ]
        then
            echo "UcBes"
        else
            echo "$i"
        fi
    done
elif [ -z $1 ]
then
    for i in {1..20}
    do
        if [ i % 3 -eq 0 ]
        then
            echo "Uc"
        elif [ i % 5 -eq 0 ]
        then
            echo "Bes"
        elif [ i % 3 -eq 0 ] && [ i % 5 -eq 0 ]
        then
            echo "UcBes"
        else
            echo "$i"
        fi
    done
else
    echo "heheheh"
fi
like image 752
A. Mesut Konuklar Avatar asked Nov 17 '25 14:11

A. Mesut Konuklar


1 Answers

Note that [ is actually synonym for the test builtin in shell (try which [ in your terminal), and not a conditional syntax like other languages, so you cannot do:

if [ [$i % 3] -eq 0 ]; then

Moreover, always make sure that there is at least one space between [, ], and the variables that comprise the logical condition check in between them.

The syntax for evaluating an expression such as modulo is enclosure by $((...)), and the variable names inside need not be prefixed by $:

remainder=$((i % 3))
if [ $remainder -eq 0 ]; then
like image 71
sampson-chen Avatar answered Nov 19 '25 07:11

sampson-chen



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!