Visit Our UNIX and Linux User Community


line 5: [: -gt: unary operator expected


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting line 5: [: -gt: unary operator expected
# 1  
Old 11-02-2009
line 5: [: -gt: unary operator expected

Hello all, Smilie
I am not getting this error.
Pls help me.

Code:
./construct_operon.sh: line 5: [: -gt: unary operator expected

Code:
#!/bin/bash
# Construct Operons using gene pairs.
rm -rf operons_result
lines=`awk 'END {print NR}' ecoli_operons`
while [ $lines -gt 0 ];
do
    head -1 ecoli_operons | awk '{print $1"\n"$2}' > pattern
    grep -f pattern ecoli_operons | awk '{print $1"\n"$2}' > temp
    pat_count=`grep -f pattern -v temp | awk 'END {print NR}'`
    while [ $pat_count -gt 0 ];
    do
        cat temp >> pattern
        grep -f pattern ecoli_operons | awk '{print $1"\n"$2}' > temp
        pat_count=`grep -f pattern -v temp | awk 'END {print NR}'`
    done
    grep -f pattern ecoli_operons | awk '{print $1"\n"$2}' | sort -u | awk '{printf $0"\t"} END {printf"\n"}' >> operons_result
    grep -f pattern -v ecoli_operons > temp1
    mv temp1 ecoli_operons
    echo $lines
    lines=`awk 'END {print NR}' ecoli_operons`
done
rm -rf temp
rm -rf pattern

Thanks in advance.

Last edited by radoulov; 11-02-2009 at 11:28 AM.. Reason: Please use code tags!
# 2  
Old 11-02-2009
Do the correction below:-

Code:
while [[ $lines -gt 0 ]]
do
commands
done

# 3  
Old 11-02-2009
Quote:
Originally Posted by ahmad.diab
Do the correction below:-

Code:
while [[ $lines -gt 0 ]]
do
commands
done

[[ ]] shouldn't be neccessary if the file ecoli_operons exists and is readable as the Awk always returns a number. It should even work on Solaris!

I would be more inclined to use "wc -l < ecoli_eperons", or "grep -c . ecoli_operons", but as I test the code given, it works fine as ilong as the file is readable.
# 4  
Old 11-02-2009
As other posters imply, what is the response to typing this command at the same place where you might execute the script? The error message implies that the response is not a number.
Quote:
awk 'END {print NR}' ecoli_operons
Knowing the Operating System and version would help.
Clutching at straws and if the above command does not give an error message.
1) The environment variable $LINES is reserved in all modern shells. Though I have no factual reason to suggest this, you could try another name for the variable $lines.
2) A script edited on a MSDOS and ported to unix without proper text file conversion could misbehave like this.
3) The trailing semi-colon on "while [ $lines -gt 0 ];" is surplus.
4) How big is the file? Is $lines a very large number (> 2x1024x1024x1024) ?

Last edited by methyl; 11-02-2009 at 09:50 PM..
# 5  
Old 11-03-2009
Now it is working properly.

ahmad.diab's solution is working.
"awk 'END {print NR}' ecoli_operons" is working.
file size is > 10x1024.
Thanks to all.
# 6  
Old 11-03-2009
As per admax request kindly see below why I did use [[ ]] in bash loops

Code:
[[ ]]
test.
Test expression between [[ ]]. This is a shell keyword

The [[ ]] construct is the more versatile Bash version of [ ]. This is the extended test command, adopted from
ksh88.
No filename expansion or word splitting takes place between [[ and ]], but there is parameter expansion
and command substitution.
file=/etc/passwd
if [[ -e $file ]]
then
echo "Password file exists."
fi
Using the [[ ... ]] test construct, rather than [ ... ] can prevent many logic errors in scripts. For example,
the &&, ||, <, and > operators work within a [[ ]] test, despite giving an error within a [ ] construct.

BR

Previous Thread | Next Thread
Test Your Knowledge in Computers #561
Difficulty: Easy
GDB is a command line debugger.
True or False?

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

[: -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: #!/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`... (1 Reply)
Discussion started by: fotex
1 Replies

3. 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

4. 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

5. UNIX for Dummies Questions & Answers

[: =: unary operator expected error

Why am I getting this error.... #!/bin/sh # iOS-Ad-Remover # Marshall Ford @ marshallbford@gmail.com # This project is hosted @ http://ios-ad- # remover.sourceforge.net # Under the GNU GPL open source license clear echo if ; then echo "You need to be root to run this script."; exit 0; #... (24 Replies)
Discussion started by: mbf123
24 Replies

6. 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

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

Featured Tech Videos