Testing for EOF during a while loop


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Testing for EOF during a while loop
# 15  
Old 11-14-2010
Quote:
Originally Posted by Scrutinizer
<<< is a so-called here-string, which is a ksh93/bash construct. It redirects stdin from a string.

Regarding 0<&3 you could have used:
Code:
#!/bin/bash
if [ $# -gt 0 ]; then
  0<<<"$@"
fi
i=0
while read ans
do
  i=$(( i+1 ))
done
echo $i

But then stdin would be no longer usable later on in your script. That is why I used file descriptor 3 to save where stdin was reading from and I redirected stdin to its old value at the end..
Thats right I would like to put the contents of standard input
to a file

but with this code I am not getting what value would I use to put it into a file

My actual code is something like this
Code:
echo "Very good
wonderful" | grader comment "xxx" 123456

what this should do is based on the value of standard input
it should create a file called comment_123456 in ~/.ratings/"$2"/comment_$3
Code:
case "$1" in
        comment)
        if [ $# -gt 1 ]; then
                      exec 3<&0 0<<<"$@"
        fi
        while read var
        do
               i=$(( i+1 ))
        done
 echo $i
        echo $var
       0<&3

                if [ -z "Check for standard input, if empty?" ] ; then
                               rm -r ~/.ratings/$2/comment_$3
                elif [ "Check for standard input, if question?" = "?" ] ; then
                               if [ -r ~/.ratings/$2/comment_$3 ] ; then
                                           cat ~/.ratings/$2/comment_$3
                               else
                                            echo "No such comment"
                                            exit 1
                                fi
                else
        if [ ! -f ~/.ratings/"$2"/comment_$3 ] ; then
                                                      touch ~/.ratings/"$2"/comment_$3
                                                      chmod 644 ~/.ratings/"$2"/comment_$3
                                fi
                        echo "send standard input to file called comment_$3" > ~/.ratings/$2/comment_$3
                        echo $3
                        exit 0
                fi
        ;;

Thanks for your help!

Last edited by Scott; 11-14-2010 at 03:45 PM.. Reason: Code tags
# 16  
Old 11-14-2010
There was a bug in my code suggestion, I corrected in my original post:
Code:
#!/bin/bash
exec 3<&0
if [ $# -gt 0 ]; then
  exec <<<"$@"
fi
i=0
while read ans
do
  i=$(( i+1 ))
done
echo $i
exec 0<&3

This User Gave Thanks to Scrutinizer For This Post:
# 17  
Old 11-14-2010
Quote:
Originally Posted by Scrutinizer
There was a bug in my code suggestion, I corrected in my original post:
Code:
#!/bin/bash
exec 3<&0
if [ $# -gt 0 ]; then
  exec <<<"$@"
fi
i=0
while read ans
do
  i=$(( i+1 ))
done
echo $i
exec 0<&3

Hi Scrutinizer,

Thank you for your help, though still I am not getting how am I going to use the input from standard input later in my script?

Could you suggest me some good resource to understand how to evaluated standard inputs in shell scripting

I would like to use
Code:
echo "Very good
great" | grader comment "XXX" 1234

where it would create a file called comment_1234 and have contents of standard input in it.

Please help me with how can I used standard input later?

Thanks!

Last edited by Scott; 11-14-2010 at 03:44 PM.. Reason: Code tags
# 18  
Old 11-14-2010
Then just forget about my suggested method for using the command line parameters as stdin. Just use your original and use $1, $2 and $3 of the command line parameters...
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

help using EOF inside a for loop

I'm having problems with this example: #!/bin/bash for i in server1 server2 server3 do ssh $i <<EOF >> logfile.txt dat1=`date '+%m/%d/%y'` hst=`hostname` df -Ph | awk -v OFS=',' -v dat="$dat1,$hst" ' {print dat,$1,$6,$3,$4 } ' exit EOF done I'm... (1 Reply)
Discussion started by: kuliksco
1 Replies

2. Shell Programming and Scripting

confused with << EOF EOF

Hi friends , I am confused with << EOF EOF Most of the cases I found sqlplus $db_conn_str << EOF some sql staments EOF another exapmle is #!/bin/sh echo -n 'what is the value? ' read value sed 's/XXX/'$value'/' <<EOF The value is XXX EOF (1 Reply)
Discussion started by: imipsita.rath
1 Replies

3. Shell Programming and Scripting

Until eof do????

Hey! Can I write a routine that allows me to in a txt file check line by line until the end of file? something like until do ---some code--- done maybe it is a stupid question but I never learned shell scripts and I need this :p thanks in advance (1 Reply)
Discussion started by: ruben.rodrigues
1 Replies

4. Programming

Eof

How can I write EOF into a file? I tryed to do as follows: size=sizeof(EOF); end_of_file=EOF; write(fdMutexRichieste, &end_of_file, size); But it does non work correctly, becouse in the next cicle (using lseek(..., SEEK_END) of my code it seems to ignore my EOF and use the LAST... (5 Replies)
Discussion started by: DNAx86
5 Replies

5. UNIX for Dummies Questions & Answers

Testing For Loop condition

How do I test the return condition in the script if no files are found: for file in `Find ${LANDING_FILE_DIR}${BTIME_FILENAME_PATTERN}` do ... .. done I want to capture the return code so I can echo the error or condition. Using if ] always returns zero no matter where it's placed. ... (4 Replies)
Discussion started by: mavsman
4 Replies

6. Shell Programming and Scripting

What is << EOF

I'm trying to connect to oracle with the following code in the script: checksqlerror{ if echo $1 exit fi } $SQLPLUS username/password@schemaname checksqlerror "failed to connect to oracle" If I'm passing wrong schema name,instead of executing checksqlerror it stops and expects user... (2 Replies)
Discussion started by: BhawanaAggarwal
2 Replies

7. Shell Programming and Scripting

Eof

hi, in a shell script i came accross the following bit of code 1.shift $(($OPTIND - 1)) 2.if ; then 3. cat << EOF >&2 4.Usage: $0 lockfilename 5.EOF 6. exit 1 7.fi I am not able to understand the meaning of lines(1,3,5). Can any one of u tell me the purpose of above said lines.... (1 Reply)
Discussion started by: ravi raj kumar
1 Replies

8. UNIX for Dummies Questions & Answers

Eof

hello all, how end of a file is detected in UNIX system? does it make use of any special symbols to identify the EOF? :( thank you all (5 Replies)
Discussion started by: compbug
5 Replies

9. Shell Programming and Scripting

EOF use

Hi, I'd like to access a windows directory from aix with samba client. To allow direct access (not interactive), i'm using EOF like: smbclient \\\\winserver\\windir 'passwd' -U usersmb << EOF cd subwindir put myfile EOF The access is correct but does somebody know how to trap errors... (1 Reply)
Discussion started by: jo_aze
1 Replies
Login or Register to Ask a Question