csh issue retrieving input from multiple lines

325 views Asked by At

The following script is being run on a HP-UX box that has only csh.

#!/bin/csh -fx
set todaysDate = `date +%m%d%y-%H:%M` 
echo -n Paste the email information here: 
set input = $<
set info = `echo $input > jcc.$todaysDate`
sed 's/.*\(PL[0-9]*\).*/\1/' jcc.$todaysDate > sample2
echo $info
echo -n Type y if the output is correct or n if it is incorrect
set answer = $<
if($answer == y || $answer == Y) then
#send to other script
else if($Answer == n || $Answer == N) then
exit
else
echo "Invalid input"
endif

It is currently not retrieving all the values needed.

Here is the information being typed:

Sample
1.-PL000000002002124215                               12                     DAY 3/11/2013
2.-PL000000002002365287                              67                     DAY 22/11/2013
3  PL000000002002745214                               35                     DAY 27/11/2013

Based on the information from the email, The first line is the only thing that it is getting stored into the variable.

Expected output is:

PL000000002002124215
PL000000002002365287
PL000000002002745214

Thank you for the replies @keith-thompson and @shellter !

This is the output based on your information and changes I did:

set todaysDate = `date +%m%d%y-%H:%M`
date +%m%d%y-%H:%M
echo -n Paste the email information here:
Paste the email information here:Sample
1.-PL000000002002124215                               12                     DAY 3/11/2013
set input = Sample
2.-PL000000002002365287                              67                     DAY  22/11/2013
echo Sample
3  PL000000002002745214                               35                     DAY  27/11/2013sed s/.*\(PL[0-9]*\).*/\1/ jcc.120913-15:10
echo Sample
Sample
echo -n Type y if the output is correct or n if it is incorrect
Type y if the output is correct or n if it is incorrectset answer = 1.- PL000000002002124215                               12                     DAY 3/11/2013
if ( 1.-PL000000002002124215 12 DAY 3/11/2013 == y || 1.-PL000000002002124215 12 DAY   3/11/2013 == Y ) then
if: Badly formed number.
homes/ 32% 2.-PL000000002002365287                               67                     DAY 22/11/2013
2.-PL000000002002365287: Command not found.
homes/ 33% 3  PL000000002002745214                                35                     DAY 27/11/2013
1

There are 1 answers

0
Keith Thompson On
set info = `echo $input > jcc.$todaysDate`

This sets $info to the output of the command echo $input > jcc.$todaysDate. Since its output is redirected to a file, there is no remaining out to store in $info.

There's no need to capture the output of that echo command anyway, since you already have it in $input.

I haven't analyzed your entire script, but for starters I'd replace the above by just:

echo $input > jcc.$todaysDate`

and replace any references to $info by $input.

And I strongly suggest indenting your code; it makes it a lot easier to read and maintain.

Finally, you should read Csh Programming Considered Harmful. You say your system only has csh, but I'm sure it has some version of the Bourne shell installed as /bin/sh.