设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
Linux 综合讨论区 —— LinuxSir.cn
›
shell进阶应用、shell编程
›
大虾请看:不知是不是read的一个bug
返回列表
查看:
859
|
回复:
6
大虾请看:不知是不是read的一个bug
[复制链接]
jiazhengw
jiazhengw
当前离线
积分
103
IP卡
狗仔卡
发表于 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
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
lpsir
lpsir
当前离线
积分
149
IP卡
狗仔卡
发表于 2006-1-18 10:21:28
|
显示全部楼层
不知道您这个脚本在哪里判断是不是整数
回复
支持
反对
使用道具
举报
显身卡
jiazhengw
jiazhengw
当前离线
积分
103
IP卡
狗仔卡
楼主
|
发表于 2006-1-18 14:29:21
|
显示全部楼层
我在第二行定义了j的类型为整型declare -i j=3.当输入一个带小数点的数时,read发现类型不对,就会报错,返回状态1.但是我的循环却不能捕捉到.看来我只能在read之前不定义变量j的类型了.
回复
支持
反对
使用道具
举报
显身卡
jiazhengw
jiazhengw
当前离线
积分
103
IP卡
狗仔卡
楼主
|
发表于 2006-1-18 14:29:28
|
显示全部楼层
我在第二行定义了j的类型为整型declare -i j=3.当输入一个带小数点的数时,read发现类型不对,就会报错,返回状态1.但是我的循环却不能捕捉到.看来我只能在read之前不定义变量j的类型了.
回复
支持
反对
使用道具
举报
显身卡
lpsir
lpsir
当前离线
积分
149
IP卡
狗仔卡
发表于 2006-1-19 08:58:22
|
显示全部楼层
哦,我的HP上似乎没有declare
呵呵
但是你可以在循环的最后echo一下readexit 的值
看看是多少 我经常这样做 虽然笨但是也不错
i=1
while [ $i != 0 ]
do
echo $i
i=0
done
没问题啊
回复
支持
反对
使用道具
举报
显身卡
jiazhengw
jiazhengw
当前离线
积分
103
IP卡
狗仔卡
楼主
|
发表于 2006-1-19 12:29:09
|
显示全部楼层
的确是这样的,read直接跳到了循环的外边,我在循环体外的第一句插入了echo $?,显示的为1,说明read读入了不匹配的类型后,直接跳出了循环体.
回复
支持
反对
使用道具
举报
显身卡
lpsir
lpsir
当前离线
积分
149
IP卡
狗仔卡
发表于 2006-1-20 11:51:30
|
显示全部楼层
read j
readexit=$(echo $?)
这两句 读输入
我认为 只要read j 读入输入成功 echo $?的结果就应该是0
你这理的判断似乎不好
我不明白呀
直到有高手解答 我不再发表议论啦 呵呵
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
Mandriva Linux
Linux 程序设计专题讨论
Redhat/Fedora/CentOS Linux
Debian Linux
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表