Test: argument expected.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Test: argument expected.
# 1  
Old 02-06-2009
Test: argument expected.

Hi,
Since i am new to Unix and on suggestion on some smart guys on unix... i have decide to learn more deeply on Unix...so i was kind of playing with if statements and found this error... though i tried to correct is for hours now i couldnt find whats wrong in my loop.

Code:
if [ -f a.out ]
then
   GRP_CNT=`wc -w a.out | awk ' { print $1 }'`  # Count the number of group numbers in a.out
   echo "$GRP_CNT"
fi
if [ ${GRP_CNT} -gt 0 ]
then
    while [ $GRP_CNT -gt 0 ]
    do
      if test $GRP_CNT -gt 0
      then
         GRP_NUM=`head -$GRP_CNT a.out | tail -1 | awk ' { print $1 }'`
         grep $GRP_NUM $HOME/tmpdata/*.dat >> abc.out
      else
         exit 1
      fi
      GRP_CNT=`expr $GRP_CNT - 1`
     done
else
     SUBJ="${SCRIPT_NAME} for ${CURRENT_DATE}"
     MSG="No .bad file not found. Runtime=$(Elapsed_Time ${START_TIME})" 
     Handle_Error
     exit 1
fi

The above code runs fine when GRP_CNT is greater then 0 but gives me this error at line if [ ${GRP_CNT} -gt 0 ] when its not greater then 0

Can any one say me why and where I went wrong

Thanks
Bhagya
# 2  
Old 02-06-2009
put all your references of GRP_CNT in double quotes like so:

"${GRP_CNT}"

Then all your tests at least won't get an error message.

But secondly, doing word count on an executable ( wc -w a.out )
makes no sense.

a.out is a binary

wc is designed to work on ASCII, printable-only characters.
# 3  
Old 02-06-2009
Well you are right by having double codes (") it worked and i am not having the error meaage anymore... but now i am geting the else mail twice... i should only get once...
# 4  
Old 02-06-2009
The mail problem must occur somewhere else other than the code you posted,
in the Handle_Error function.

Either that, or the code you provided is in a loop somewhere.
# 5  
Old 02-06-2009
Quote:
Originally Posted by bhagya2340
Hi,
Since i am new to Unix and on suggestion on some smart guys on unix... i have decide to learn more deeply on Unix...so i was kind of playing with if statements and found this error... though i tried to correct is for hours now i couldnt find whats wrong in my loop.

Code:
if [ -f a.out ]
then
   GRP_CNT=`wc -w a.out | awk ' { print $1 }'`  # Count the number of group numbers in a.out


There's no need for awk:

Code:
GRP_CNT=`wc -w < a.out`

Quote:
Code:
   echo "$GRP_CNT"
fi
if [ ${GRP_CNT} -gt 0 ]


Give the variable a default value in case a.out doesn't exist:

Code:
if [ ${GRP_CNT:=0} -gt 0 ]

(Or initialize it before checking for a.out.)

Quote:
Code:
then
    while [ $GRP_CNT -gt 0 ]
    do
      if test $GRP_CNT -gt 0


Why are you testing $GRP_CNT twice. You already know is is greater than 0, so your else clause will never be executed.
Quote:
Code:
      then
         GRP_NUM=`head -$GRP_CNT a.out | tail -1 | awk ' { print $1 }'`


You don't need head or tail:

Code:
GRP_NUM=`awk -v n=$GRP_CNT 'NR == n { print $1; exit }'`

Quote:
Code:
         grep $GRP_NUM $HOME/tmpdata/*.dat >> abc.out
      else
         exit 1
      fi
      GRP_CNT=`expr $GRP_CNT - 1`


There's no need for an external command for integer arithmetic; it's built into the shell:

Code:
GRP_CNT=$(( $GRP_CNT - 1 ))

Quote:
Code:
     done
else
     SUBJ="${SCRIPT_NAME} for ${CURRENT_DATE}"
     MSG="No .bad file not found. Runtime=$(Elapsed_Time ${START_TIME})" 
     Handle_Error
     exit 1
fi

The above code runs fine when GRP_CNT is greater then 0 but gives me this error at line if [ ${GRP_CNT} -gt 0 ] when its not greater then 0

Can any one say me why and where I went wrong

Thanks
Bhagya
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Test: argument expected

The following example prompts are passed into the shell script. $1 = /tmp/dir/ $2 = varies (test.txt, test1.txt, test2.txt...) $3 = test_YYYYMMDD.txt --------------------------------------------------------------------------- #!/bin/sh cd $1 if ; then if ; then ... (3 Replies)
Discussion started by: smkremer
3 Replies

2. Shell Programming and Scripting

Error- test: argument expected

check_build_info_table() { if then export build_info_table=`sqlplus -s sna/dbmanager <<! set pagesize 0 heading off feedback off SELECT DISTINCT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'XYZ' AND TABLE_NAME = 'MY_TABLE'; exit !` ... (3 Replies)
Discussion started by: ambarginni
3 Replies

3. UNIX for Advanced & Expert Users

Error:--test: argument expected--Even though i give an argument.

Hi All, I am running the script VBoxManage list vms |sed 's/"//g' | cut -d " " -f1 > har1out.mytxt result=`cat har1out.mytxt | grep $1' echo $result echo $1 { if then echo pass else echo fail fi (2 Replies)
Discussion started by: harsha85
2 Replies

4. Shell Programming and Scripting

error : test: argument expected

Hello all, I am trying to figure out why i am getting an error while executing the script...altought it seems like its work...but still get the test arguement error...any help would be appericiate...this script basically connects to any oracle db ( just have to pass db name to it)... (4 Replies)
Discussion started by: abdul.irfan2
4 Replies

5. Shell Programming and Scripting

test: argument expected

# to search a file if it exists and whether its readable or not # if yes print its first 5 lines echo enter the filename to be searched read fname if #-d $fname then echo file doesn exists elif then echo its a directory elif then cat $fname else echo its not readable fi # end of... (9 Replies)
Discussion started by: gotam
9 Replies

6. Shell Programming and Scripting

test: argument expected

+ test.sh: test: argument expected #!/bin/bash if then echo thennnn else echo elseeee fi why does it show this error? Clearly from debug mode, the argument is passed. I also tried if Run on Solaris 9. Thanks (10 Replies)
Discussion started by: lalelle
10 Replies

7. Shell Programming and Scripting

test: argument expected

I'm newbie to coding script so i found test: argument expected when i run it. please help me a=`df -k |awk '{print $5 }'|egrep "(100%|%)"|cut -d"%" -f1|tail -1` if then df -k|egrep "(100%|%)"|awk '{print $1,$5,$6}' else echo "No disk capacity more than 80%" fi thk in advance (7 Replies)
Discussion started by: unitipon
7 Replies

8. Shell Programming and Scripting

test: argument expected

Can someone help me with a very simple query I have the following script: #!/bin/sh VAR1="" if then VAR1="Message" fi echo $VAR1 put when i run it i get the following error test_job.sh: test: argument expected (5 Replies)
Discussion started by: andy202
5 Replies

9. UNIX for Dummies Questions & Answers

test:argument expected

Hi all, I am getting "test:argument expected" error in the following script LOGDIR=$XXAR_TOP/log PROGRAM_NAME=XXAR_GPS_LBFDMSGEN .. .. .. Check_Errors() { sqllogfile=$1 cd ${LOGDIR} countfile=${LOGDIR}/${PROGRAM_NAME}.tmp echo "countfile is " $countfile >> $LOGFILE echo... (4 Replies)
Discussion started by: rrs
4 Replies

10. Shell Programming and Scripting

ERROR-> test: argument expected , what does it mean?

I am trying to compare two integer variables in the if statement, but i am getting this "test:argument expected". What am i missing? Why is the if loop not executing correctly? trunkPCM="100000"; more $FILE |while read line do PCM=`echo $line | awk '{ print $2 }'` ... (4 Replies)
Discussion started by: tan102938
4 Replies
Login or Register to Ask a Question