免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3176 | 回复: 6
打印 上一主题 下一主题

跳出循环,变量值消失. SOS [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-08-03 11:43 |显示全部楼层 |倒序浏览
碰到一个问题. 代码如下:
LINENO=1
while [ 1 ]
do
        LINE=`sed -n -e "$LINENO p" $3`
        echo "$LINE"
done < $3
echo "line number = $LINENO"


当跳出循环, LINENO值变为1. 求教如何能保留值在循环外.

论坛徽章:
0
2 [报告]
发表于 2003-08-03 12:21 |显示全部楼层

跳出循环,变量值消失. SOS

还是不行. 我改成如下:
LINENO=1
export LINENO
while [ 1 ]
do
LINE=`sed -n -e "$LINENO p" $3`
echo "$LINE"
done < $3
echo "line number = $LINENO"


或把他放到循环了还是不行. thanks anyways.

论坛徽章:
0
3 [报告]
发表于 2003-08-03 12:37 |显示全部楼层

跳出循环,变量值消失. SOS

下面是整个代码: 是一个将input 传给一程序, 然后和一个output文件比较. 列出不一样的test case.

INDEX=1
LAST_INDEX=1
CASENO=1
LINENO=1
if [ $# -ne 3 ]
then
        echo "Usage: tester executable_file_name input_file_name output_file_name."
        exit 0
fi
if [ ! -x $1 ]
then
        echo "$1 is not an executable file."
fi
if [ ! -r $2 ]
then
        echo "$2 is not a readable file."
fi
if [ ! -r $3 ]
then
        echo "$3 is not a readable file."
fi
TOTALLINE=`wc -l $3 | sed "s/ $3$//" | sed "s/^       //"`
readonly TOTALLINE
for TOKEN in `cat $2`
do
        EXP="$EXP $TOKEN"
        if [ $TOKEN = "=" -o $TOKEN = "==" ]
        then
                if [ ! -w /tmp/tmp2$$ ]
                then
                        echo "=========" > /tmp/tmp2$$
                else
                        echo "=========" >> /tmp/tmp2$$
                fi
                echo $EXP | $1 >> /tmp/tmp2$$
                echo "RC=$?" >>/tmp/tmp2$$
                #read one output of test case and put it in /tmp/tmp$$ file. Then cut
                #these lines.
                while [ 1 ]
                do
                        LINE=`sed -n -e "$LINENO p" $3`
                        echo "$LINE"
                        LINENO=`expr $LINENO + 1`
                        export LINENO
                        echo "line number = $LINENO"
                        if [ ! -w /tmp/tmp1$$ ]
                        then
                                echo $LINE >/tmp/tmp1$$
                        else
                                echo $LINE >>/tmp/tmp1$$
                        fi
                        THREECHAR=`echo $LINE | cut -c1-3`
                        #echo $THREECHAR
                        if [ $THREECHAR = "RC=" ]
                        then
                                break
                        fi
                done < $3
                unset EXP
                if [ "`diff /tmp/tmp1$$ /tmp/tmp2$$`" ]
                then
                        echo $CASENO
                fi
                CASENO=`expr $CASENO + 1`
                /usr/bin/rm /tmp/tmp1$$ /tmp/tmp2$$
        fi
done

调用格式为: tester program_name input_file output_file

论坛徽章:
0
4 [报告]
发表于 2003-08-03 13:14 |显示全部楼层

跳出循环,变量值消失. SOS

input file:
H FOO + =
H FOO + ==
FOO + H ==
FOO + H =
FOO  H + =
H H + H FOO =
文件名为inputs.txt.
还有一个outputs file:
=========
Error: Invalid ERN in expression  H FOO +
RC=1
=========
Error: Invalid ERN in expression  H FOO +
RC=1
=========
Error: Invalid ERN in expression  FOO +
RC=1
=========
Error: Invalid ERN in expression  FOO +
RC=1
=========
Error: Invalid ERN in expression  FOO H +
RC=1
这2个文件和另一个UNIX 文件都是老师给的. 要我们写一个shell 文件把input的test case 给ernexp程序, 这程序会打印出结果. 然后和outputs.txt 进行比较如果某个case 不一样就打印出 case number. outputs 中的"========" 是用来分割test case 的. 下一行是结果. 在下一行是这个程序的 return value.
执行格式: tester.sh ernxep inputs.txt outputs.txt
若还是不clear. 我再补充. Thanks so much.

ernexp.jpg

14.54 KB, 下载次数: 3971

UNIX 可执行文件. 把.jpg去掉既可.

论坛徽章:
0
5 [报告]
发表于 2003-08-03 14:26 |显示全部楼层

跳出循环,变量值消失. SOS

谢谢, 我再试试, 是得. 吧 ernexp 的output 和 outputs 进行比较. 我的是bourne shell. 学校的机器是saloris 的. Thanks a gain.

论坛徽章:
0
6 [报告]
发表于 2003-08-03 14:28 |显示全部楼层

跳出循环,变量值消失. SOS

程序的output 是字串

论坛徽章:
0
7 [报告]
发表于 2003-08-03 14:35 |显示全部楼层

跳出循环,变量值消失. SOS

按照你的方法问题解决了. 太感谢了. 你用这个办法把重定向去掉了. 谢谢.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP