[: -gt: unary operator expected


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers [: -gt: unary operator expected
# 1  
Old 09-26-2012
[: -gt: unary operator expected

Hi
I have problem with my script.
I dont now why but i don't change anything and script stop working.

this is my code:
Code:
#!/bin/sh
for i in `ps -A | grep pocron.sh | grep -v grep | awk '{print $2}'`
do
        COUNT=$((COUNT+1))
done

ostatnie_wykonanie=`cat porader.log`
aktualna_data=`date +%s`
wynik=$(($aktualna_data - $ostatnie_wykonanie))

if [ $wynik -gt 63 ]
then

if [ $COUNT -z ]
then
./pocron.sh
fi
elif [ $COUNT -gt 1 ]
then
killall pocron.sh
./pocron.sh
fi
exit

when i run script error is:
[: -gt: unary operator expected

on line 18

line 18 is:

Code:
elif [ $COUNT -gt 1 ]

can you help me fix problem?
# 2  
Old 09-26-2012
I suppose the problem comes from "$COUNT" not being initialised. If the expression driving the for-loop in the first line of your script produces no output the loops body will never be executed and this leaves COUNT uninitialised.

The error-message comes from "test" ("[" is just another name for this program) and says that "-gt" is a clause which expects two operands: one before and one behind. One of these required operands is missing.

Insert a debug line before the line

Code:
echo \"$COUNT\"
if [ $COUNT -z ]

to make sure COUNT does indeed have a value - i suppose it doesn't.

Furthermore, there are severe problems with your code:
Code:
if [ $COUNT -z ]

is a syntax error: "-z" expects an operand after, not before. It tests for a variable being uninitialised or empty and because no variable is given this is always true. Still, this is probably not what you want. (Syntactically) Correct is

Code:
if [ -z $COUNT ]

Still, using variables which are sometimes initialised, sometimes not is always a hazard. Add to this that you don't even need the for-loop for counting (use "grep -c" instead) and you shouldn't use backticks at all (really! - they are B-A-D).

Further, i suggest you reindent your code properly. The following syntax error would have stood out immediately:

Code:
if ...
     ....
fi
elif ....
     ....
fi

The "elif" should be an "if", because the first "if" is already closed by a "fi". The "elif" is not the "else"-part of the "if". As there are no other clauses you test the "elif" is superlfuous and you should simply use "else".

Write your script this way:

Code:
#! /bin/sh

typeset -i COUNT=0               # you make sure the variable is declared

COUNT=$(ps -A | grep pocron.sh | grep -vc grep)

...

if [ $COUNT -eq 0 ] ; then
     ....
else
    .....

I hope this helps.

bakunin

Last edited by bakunin; 09-28-2012 at 01:52 PM..
This User Gave Thanks to bakunin For This Post:
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Unary operator expected

In all my Googling, this usually happens when someone is comparing a variable, and that variable is unset. That doesn't appear to be the case for me... #!/bin/bash -x while read line do f=$(echo $line | tr -s ' ' | cut -d' ' -f 3) echo $f if then echo "This... (2 Replies)
Discussion started by: jnojr
2 Replies

2. UNIX for Dummies Questions & Answers

: unary operator expected

Hiya all, Why do I get a :unary operator expected when I try to put a condition statement in my shell script (sh) like so and how to fix? if ; then echo "say hello" else echo "don't say hello" fi ? It seems if the script receives an argument it works but if I don't put an... (4 Replies)
Discussion started by: cyberfrog
4 Replies

3. Shell Programming and Scripting

unary operator expected

i=0 while Shell script reports an error "unary operator expected" pointing the above line. $i by default is 0 and holds integer value and $buf is also holding integer value. Please can some one let me know what is missing. Thanks. (1 Reply)
Discussion started by: sunrexstar
1 Replies

4. UNIX for Dummies Questions & Answers

Problem unary operator expected

I get the following error ./get_NE05: line 42: while do echo ${STRING_NAME} J=1 if ; then EXT=0$I else EXT=$I fi while do echo $I-$J #calculating last occurrence OCCURRENCE=`grep -io "${STRING_NAME}"... (3 Replies)
Discussion started by: f_o_555
3 Replies

5. UNIX for Dummies Questions & Answers

Error : -ne: unary operator expected

find . -name "*.*"|xargs grep WT:DBF_WL>> $F Wfexist=`cat $F|grep $i` echo $Wfexist if ; then echo $Wfexist echo "Workflow Exist" else touch $O chmod 777 $O echo $Wfexist echo $WfExist >> $O fi I am getting the error that -ne: unary operator expected in the line with red... (2 Replies)
Discussion started by: ritu.s
2 Replies

6. Shell Programming and Scripting

line 5: [: -gt: unary operator expected

Hello all, :confused: I am not getting this error. Pls help me. ./construct_operon.sh: line 5: #!/bin/bash # Construct Operons using gene pairs. rm -rf operons_result lines=`awk 'END {print NR}' ecoli_operons` while ; do head -1 ecoli_operons | awk '{print $1"\n"$2}' > pattern ... (5 Replies)
Discussion started by: admax
5 Replies

7. Shell Programming and Scripting

unary operator expected

Im trying to fix my /etc/weekly that rotates various logs however it does them no matter what filesize they are and i want them to only do it if there file size exceeds 2M or something. So I'm playing with a script to get the filesize using a ls -l command which works and puts the value into a... (3 Replies)
Discussion started by: timgolding
3 Replies

8. UNIX for Dummies Questions & Answers

[: =: unary operator expected

HI, while running a script, I got the below mentioned error. /bin/sh: line10 : supportedMozillaVersion() { case "$*" in *rv:1.*) return 0;; *rv:.*) return 0;; *rv:*) return 1;; Mozilla\ 1.*) return 0;; Mozilla\ .*) return 0;; *) return 1;; esac } supportedFirefoxVersion() { case... (7 Replies)
Discussion started by: bhag281
7 Replies

9. Shell Programming and Scripting

unary operator expected

hi i am trying to compare a value with value 50. but i am getting " I am using if then echo "------------" fi please help thanks in advance Satya (2 Replies)
Discussion started by: Satyak
2 Replies

10. UNIX for Dummies Questions & Answers

unary operator expected error

Hi I am doing a script like if then echo "table name dosent exist" exit fi the problem is if $table_name is null then i am getting the error Please help me Thanks in advance (2 Replies)
Discussion started by: ssuresh1999
2 Replies
Login or Register to Ask a Question