Bash Script: Binary Operator Expected

Bash Script: Binary Operator Expected

So I have reviewed a lot of entries on here and cannot figure out what I am doing wrong here. I am new to scripting and want to know why this does not work:

input is

./filedirarg.sh /var/logs fileordir.sh

script is

#! /bin/bash
echo "Running file or directory evaluation script"
LIST=$@
if [ -f $LIST ]
then
echo "The entry ${LIST} is a file"
elif [ -d $LIST ]
then
echo "The entry ${LIST} is a directory"
fi

This results in

./filedirarg.sh: line 4: [: /var/logs: binary operator expected
./filedirarg.sh: line 7: [: /var/logs: binary operator expected

It runs fine with this

./filedirarg.sh fileordir.sh 

Quoting the $LIST in the evaluation results in no output except the first echo statement.

11

2 Answers

I think [ -f … ] (or test -f …) requires exactly one argument. When you run

./filedirarg.sh /var/logs fileordir.sh

there are two. The same with [ -d … ].


This is a quick fix:

#! /bin/bash
echo "Running file or directory evaluation script"

for file ; do
 if [ -f "$file" ]
 then
  echo "The entry '$file' is a file"
 elif [ -d "$file" ]
 then
  echo "The entry '$file' is a directory"
 fi
done

Thanks to quoting it should work with names with spaces (e.g. ./filedirarg.sh "file name with spaces").

Also note for file ; do is equivalent to for file in "$@" ; do.

9

binary operator expected

if [ -f $LIST }

The } above should be a ], as explained by ShellCheck:

$ shellcheck myscript

Line 4:
if [ -f $LIST }
^-- SC1009: The mentioned parser error was in this if expression.
   ^-- SC1073: Couldn't parse this test expression.
              ^-- SC1072: Expected test to end here (don't wrap commands in []/[[]]). Fix any mentioned problems and try again.

$ 
4

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Chloe Bennett
Author

Chloe Bennett

Chloe Bennett explores the intersection of pop culture, streaming entertainment, digital trends, and contemporary lifestyle. Her weekly commentary reaches thousands of culture enthusiasts.