Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

binary operator expected error when checking if a file with full pathname exists

Tags:

unix

pathname=$(cat $HOME/.rm.cfg)
if [ ! -z $pathname/$1 ]

.rm.cfg is a file that contains the following directory

/home/username/deleted1

$1 is the name of a file eg. glass

why does the line if [ ! -z $pathname/$1 ] give a binary operator expected error.

like image 412
user3809938 Avatar asked Jul 07 '14 04:07

user3809938


People also ask

What is binary operator expected error?

Error Message If you see binary operator expected , the command has failed to complete properly.

What is unary operator in shell scripting?

The word unary is basically synonymous with “single.” In the context of mathematics, this could be a single number or other component of an equation. So, when Bash says that it is expecting a unary operator, it is just saying that you are missing a number in the script.

Is not equal to in bash?

The not equal function in Ubuntu bash is denoted by the symbol “-ne,” which would be the initial character of “not equal.” Also included is the “! =” operator that is used to indicate the not equal condition.


2 Answers

Looks like your $pathname includes more than one word. Could be multiple lines in your .rm.cfg file, or perhaps the path includes spaces. Anyway, you end up with

if [ ! -z word word word/$1 ]

which is no good. If you're just expecting a single path and want to protect against the path containing whitespace, change your if line to

if [ ! -z "$pathname/$1" ]
like image 177
chrisdowney Avatar answered Oct 21 '22 17:10

chrisdowney


I had faced the same error (binary operator expected) when receiving more than one word for some variable when using it as shown below:

if [ ! -z ${variable} ];

So to resolve this error I changed it to:

if [[ ! -z ${variable} ]];
like image 32
Sanjay Avatar answered Oct 21 '22 19:10

Sanjay