LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 860|回复: 6

大虾请看:不知是不是read的一个bug

[复制链接]
发表于 2006-1-17 20:37:26 | 显示全部楼层 |阅读模式
在下面的脚本中,我本想用while循环判断read应读入一个整数,但是当我输入一个带小数点的数如34.5时,read报错后,脚本并没有按照我的要求进入下一次循环重新用read读取正确的输入,却直接退出了while循环,开始去执行后面的for循环了。这不知是我的程序有问题还是read的bug?请大虾指教!代码如下:

#!/bin/bash
declare -i j=3
declare -i m=0
readexit=1
while [ $readexit != 0 ]
do
        echo -e "input the number:\c"
        read j
        readexit=$(echo $?)
        if [ $readexit != 0 ];then
                echo "please reply a correct int number!"
        fi
done
for ((i=1;i<=j;i=i+1))
do
        m=m+i
done
printf "the count is:%d\n" $m
unset readexit
发表于 2006-1-18 10:21:28 | 显示全部楼层
不知道您这个脚本在哪里判断是不是整数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-18 14:29:21 | 显示全部楼层
我在第二行定义了j的类型为整型declare -i j=3.当输入一个带小数点的数时,read发现类型不对,就会报错,返回状态1.但是我的循环却不能捕捉到.看来我只能在read之前不定义变量j的类型了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-18 14:29:28 | 显示全部楼层
我在第二行定义了j的类型为整型declare -i j=3.当输入一个带小数点的数时,read发现类型不对,就会报错,返回状态1.但是我的循环却不能捕捉到.看来我只能在read之前不定义变量j的类型了.
回复 支持 反对

使用道具 举报

发表于 2006-1-19 08:58:22 | 显示全部楼层
哦,我的HP上似乎没有declare
呵呵

但是你可以在循环的最后echo一下readexit 的值
看看是多少 我经常这样做 虽然笨但是也不错

i=1
while [ $i != 0 ]
do
  echo $i
  i=0
  done
没问题啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-19 12:29:09 | 显示全部楼层
的确是这样的,read直接跳到了循环的外边,我在循环体外的第一句插入了echo $?,显示的为1,说明read读入了不匹配的类型后,直接跳出了循环体.
回复 支持 反对

使用道具 举报

发表于 2006-1-20 11:51:30 | 显示全部楼层
read j
readexit=$(echo $?)
这两句 读输入
我认为 只要read j 读入输入成功 echo $?的结果就应该是0
你这理的判断似乎不好
我不明白呀
直到有高手解答 我不再发表议论啦 呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表