user20304030
user20304030

Reputation: 37

-eq unary operator expected

I have this code here. But I get the error:

./concatconvert: line 9: [: -eq: unary operator expected
./concatconvert: line 18: [: -eq: unary operator expected

This is my code:

#!/bin/bash

param=$#
if [ $# -le 2 ]
then
 echo "Usage: concatconvert [-u|-1] FILE ...
 Description: concatenates FILE(s) to standard output separating them with divider -----. Optional first argument -u or -l converts contents to uppercase or lowercase,$
fi
if [ $1 -eq "-u" ]
then
 while [ $param -ge 1 ]
 do
  ./concat | awk '{print toupper($0)}'
  param=$(( param-1 ))
  shift
done
fi
if [ $1 -eq "-l" ]
then
 while [ $param -ge 1 ]
 do
 ./concat | awk '{print tolower($0)}'
 param=$(( param-1 ))
 shift
done
fi

Why am I getting this error? I thought that -eq is a unary operator?

Upvotes: 1

Views: 1545

Answers (1)

RavinderSingh13
RavinderSingh13

Reputation: 133528

You have missed few things eg--> " for echo command was NOT closed. Then in if condition since you are comparing a string so change it to if [[ "$1" = "-u" ]] so following could be the script(I haven't tested it since no samples were there).

#!/bin/bash

param=$#
if [ $# -le 2 ]
then
 echo "Usage: concatconvert [-u|-1] FILE ...
 Description: concatenates FILE(s) to standard output separating them with divider -----. Optional first argument -u or -l converts contents to uppercase or lowercase,$"
fi
if [[ "$1" = "-u" ]]
then
 while [ $param -ge 1 ]
 do
  ./concat | awk '{print toupper($0)}'
  param=$(( param-1 ))
  shift
done
fi
if [[ $1 -eq -l ]]
then
 while [ $param -ge 1 ]
 do
 ./concat | awk '{print tolower($0)}'
 param=$(( param-1 ))
 shift
done
fi

Upvotes: 3

Related Questions