csh问题从多行检索输入

时间:2013-12-09 19:24:12

标签: unix csh hp-ux

以下脚本正在仅具有csh的HP-UX盒上运行。

#!/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

目前尚未检索到所需的所有值。

以下是输入的信息:

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

根据电子邮件中的信息,第一行是唯一存储在变量中的内容。

预期输出为:

PL000000002002124215
PL000000002002365287
PL000000002002745214

感谢@ keith-thompson和@shellter的回复!

这是根据您的信息和我所做的更改输出的结果:

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 个答案:

答案 0 :(得分:0)

set info = `echo $input > jcc.$todaysDate`

这会将$info设置为命令echo $input > jcc.$todaysDate的输出。由于其输出被重定向到文件,因此没有剩余存储在$info

无论如何都不需要捕获echo命令的输出,因为您已经在$input中拥有它。

我没有分析过你的整个剧本,但对于初学者我只会用以下内容替换上面的内容:

echo $input > jcc.$todaysDate`

并将$info的所有引用替换为$input

我强烈建议缩进你的代码;它使阅读和维护变得更加容易。

最后,您应该阅读Csh Programming Considered Harmful。你说你的系统只有csh,但我确定它有一些版本的Bourne shell安装为/bin/sh