[: too many arguments


 
Thread Tools Search this Thread
Operating Systems Linux Ubuntu [: too many arguments
# 1  
Old 03-26-2019
[: too many arguments

line 5: [: too many arguments

Code:
#!/bin/bash
old=$(du -sh /home/andy/Downloads/myfile.iso)
while true; do
    new=$(du -sh /home/andy/Downloads/myfile.iso)
    if [ $old -eq $new  ] ; 
    then
        break
    fi
    old=$new
    xdotool getactivewindow key Ctrl
    sleep 5
done

line 5: [: too many arguments

I read about that error here, but could not figure the cause of my error.

bash - Meaning of "[: too many arguments" error from if [] (square brackets) - Stack Overflow
# 2  
Old 03-27-2019
-eq is used for numbers not strings.

Try using double quotes and the equal sign:
Code:
if [ "$valueA" = "$valueB" ] ; then
   # do something here
fi

du -sh produces two strings, so I guess you want the first "number" which is an alphanumeric value.
Code:
$ du -sh $HOME
523M    /home/Owner

So if this is the case what do you actually want to compare? First value?

Last edited by jim mcnamara; 03-27-2019 at 12:38 AM..
# 3  
Old 03-27-2019
Expanding a bit on what Jim has already said...

Your first problem (too many arguments caused by improperly quoting your operands) can be fixed by changing:
Code:
    if [ $old -eq $new  ] ;

to:
Code:
    if [ "$old" -eq "$new" ] ;

Your second problem (using a numeric comparison operator to compare non-numeric strings) can be fixed by changing:
Code:
    if [ "$old" -eq "$new" ] ;

to:
Code:
    if [ "$old" = "$new" ] ;

Your third problem (assuming that human readable file sizes will change quickly enough in five seconds when file sizes will be large enough to cause a change in the output) can be fixed by changing:
Code:
du -sh /home/andy/Downloads/myfile.iso

in two places to:
Code:
du -s /home/andy/Downloads/myfile.iso

so you will be comparing the actual file sizes in bytes (instead of possibly in tenths of kilobytes, megabytes, gigabytes, terabytes, or petabytes).

Your fourth problem (assuming that the file size will change immediately between two adjacent invocations of the above du command at the start of your script can be fixed by moving the sleep 5 from the end of your loop to the start of your loop.

That gets us to a modified script that looks something like:
Code:
#!/bin/bash
old=$(du -s /home/andy/Downloads/myfile.iso)
while true
do
    sleep 5
    new=$(du -s /home/andy/Downloads/myfile.iso)
    if [ "$old" = "$new" ] 
    then
        break
    fi
    old=$new
    xdotool getactivewindow key Ctrl
done

But, I have absolutely no idea why you want to run the command xdotool getactivewindow key Ctrl every five seconds while the size of a seemingly unrelated file is changing and not run it at all if the file has stopped growing before your script is started???

I hope this helps. But, since I don't understand what you're trying to do, I may have misread everything you're trying to do. Smilie
# 4  
Old 03-27-2019
du gives file sizes in "blocks", but that's certainly more precise than megabytes.

Here having multiple commands between while and do is an alternative to the true/break.
The last exit status (before the do) counts.
Code:
while
    sleep 5
    new=$(du -s /home/andy/Downloads/myfile.iso)
    [ "$old" != "$new" ] 
do
    old=$new
    xdotool getactivewindow key Ctrl
done

# 5  
Old 03-27-2019
Quote:
Originally Posted by Don Cragun
Expanding a bit on what Jim has already said...

Your first problem (too many arguments caused by improperly quoting your operands) can be fixed by changing:
Code:
    if [ $old -eq $new  ] ;

to:
Code:
    if [ "$old" -eq "$new" ] ;

Your second problem (using a numeric comparison operator to compare non-numeric strings) can be fixed by changing:
Code:
    if [ "$old" -eq "$new" ] ;

to:
Code:
    if [ "$old" = "$new" ] ;

Your third problem (assuming that human readable file sizes will change quickly enough in five seconds when file sizes will be large enough to cause a change in the output) can be fixed by changing:
Code:
du -sh /home/andy/Downloads/myfile.iso

in two places to:
Code:
du -s /home/andy/Downloads/myfile.iso

so you will be comparing the actual file sizes in bytes (instead of possibly in tenths of kilobytes, megabytes, gigabytes, terabytes, or petabytes).

Your fourth problem (assuming that the file size will change immediately between two adjacent invocations of the above du command at the start of your script can be fixed by moving the sleep 5 from the end of your loop to the start of your loop.

That gets us to a modified script that looks something like:
Code:
#!/bin/bash
old=$(du -s /home/andy/Downloads/myfile.iso)
while true
do
    sleep 5
    new=$(du -s /home/andy/Downloads/myfile.iso)
    if [ "$old" = "$new" ] 
    then
        break
    fi
    old=$new
    xdotool getactivewindow key Ctrl
done

But, I have absolutely no idea why you want to run the command xdotool getactivewindow key Ctrl every five seconds while the size of a seemingly unrelated file is changing and not run it at all if the file has stopped growing before your script is started???

I hope this helps. But, since I don't understand what you're trying to do, I may have misread everything you're trying to do. Smilie
I simply want to know if a download is occurring in Firefox.

If download is occurring then do not go into a suspend state.
# 6  
Old 03-27-2019
My own tuppence worth on this:
  • As this is in the Ubuntu sub-forum, ps has a -b (size in bytes) option;
  • If you want the size of a file in bytes, surely the most accessible (and therefore most portable) option is to use wc -c
  • As you are using bash, surely the [[ ... ]] construct is better as you don't have to quote variables;
  • If using numeric comparison in bash, using the (( ... )) construct is more readable.
Andrew
This User Gave Thanks to apmcd47 For This Post:
# 7  
Old 03-27-2019
Quote:
Originally Posted by drew77
I simply want to know if a download is occurring in Firefox.

If download is occurring then do not go into a suspend state.
Absolutely nothing that you are doing in the script you have shown us in this thread will tell you anything about whether or not Firefox is downloading a file unless it happens to be downloading a single file named /home/andy/Downloads/myfile.iso unless there is something going on behind the scenes such that the command xdotool getactivewindow key Ctrl has the side effect of causing /home/andy/Downloads/myfile.iso to change size if Firefox is downloading a file.

Does running the command xdotool getactivewindow key Ctrl cause the size of /home/andy/Downloads/myfile.iso to change?

Note that MadeInGermany is correct about du -s reporting file sizes as a number of blocks (512-byte blocks if the version of du on your version of Ubuntu adheres to the standards; but quite likely on most versions of Linux systems you'll get counts of a larger sized block). If you want to detect small increments of change, please do not use wc -c pathname as suggested by apmcd47; that will increase the CPU an IO load on your system significantly if you are downloading a large file. Using ls -n pathname would be a much better choice. It will report changes in file size to the number of bytes in the file and only has to do a stat() on the file to get its size; using wc -c pathname is usually implemented by wc opening, reading, and counting every byte in pathname. (Note that ls -n output is like ls -l output except it prints the file owner's user ID and file group's group ID instead of looking up and printing the file owner's user name and file group's group name; therefore, it is slightly faster and uses fewer system resources to get the job done. If you were using a UNIX system instead of a Linux system, I'd suggest using ls -og which avoids printing user and group names or IDs completely.)
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Too many arguments

hi I have this code a="a b c" set -- $a if ; then echo empty fi why is it line 3 reports "test: [: too many arguments"? :wall: Thanks! (4 Replies)
Discussion started by: h0ujun
4 Replies

2. Shell Programming and Scripting

Using arguments

I have a SNMP agent that sends three arguments to the script to get a value at the end. The first is the LeafNumber, second is the request type (SET, GET, GETNEXT), and the last is a string that represents some value to be set(used only for set requests). The agent string looks like this: ... (3 Replies)
Discussion started by: jsoper1
3 Replies

3. Shell Programming and Scripting

: [: too many arguments in for -f in if

Hi Experts , I have following code if ; then mv path /filename newdirpath echo "K* files moved successfully to newdirpath \n" else echo "K* files DID NOT moved successfully to newdirpath \n" fi I am getting "echo "K* files DID NOT moved successfully to newdirpath \n"... (19 Replies)
Discussion started by: ajaypatil_am
19 Replies

4. Shell Programming and Scripting

grep with two arguments to arguments to surch for

Hello, is it possible to give grep two documents to surche for? like grep "test" /home/one.txt AND /home/two.txt ? thanks (1 Reply)
Discussion started by: Cybertron
1 Replies

5. Shell Programming and Scripting

Too many arguments

echo "the number from 1 to 10:" i=1 while do echo $i i=`expr $i+1' done above is the program i written in Linux O.S using vi editor but i am getting the error that while: line 3: i am not understanding that why i am getting this error. can any body please help me regarding this... (3 Replies)
Discussion started by: bsatishbabu
3 Replies

6. Shell Programming and Scripting

[: too many arguments

hi I am getting too many arguments error for the below line if ; then Thx in advance (1 Reply)
Discussion started by: vls1210
1 Replies

7. Shell Programming and Scripting

too many arguments?

i don't know what's wrong with the code, says too many arguments in the first two if statements. how to change it? thx. the file is like in this format: ;dfs;dfdsf;fsd ff dsf;dfdffdfd; -f2 should be only one word with no space, but could be like this 'n/a', '**ABC' while read line; do ... (1 Reply)
Discussion started by: dtdt
1 Replies

8. Shell Programming and Scripting

Too many arguments?

I can't find anything wrong with this line of code, it works when there is one file in the directory but more than one i get a "too many arguements2 error if ; then am i missing something? (3 Replies)
Discussion started by: Alendrin
3 Replies

9. Shell Programming and Scripting

[: too many arguments

Hi Guys I have this small Bash script - but it fails when I'm trying to run it. ./test.sh: && ; then # date >> /writable/sys/shutdown.log shutdown -h "now" exit fi done (4 Replies)
Discussion started by: tainted2real
4 Replies

10. UNIX for Dummies Questions & Answers

Arguments

Ok so i had to create a file and put some random text into it which i did. THen u make a script which takes 2 arguments. The first being a line of text, the second being your newly created file. The script should take the first argument and insert it into the very top (the first line) of... (1 Reply)
Discussion started by: iago
1 Replies
Login or Register to Ask a Question

Featured Tech Videos