shell 编程高手请指教。谢谢

tom2zhang 2003-10-10 09:37:39
#!/bin/sh
trap "my_exit" 2
LOOP=1
my_exit(){
echo "now you will exit, the number is $LOOP"
echo bye
exit 1
}
while 1>0
do
LOOP=`expr $LOOP + 1`
echo $LOOP
done

第一次执行显示正常
now you will exit, the number is 156
bye
第二次执行显示:
now you will exit, the number is now you will exit, the number is 67
bye
bye
请问为什么会出现这种情况。谢谢

...全文
30 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
linaxing 2003-10-15
  • 打赏
  • 举报
回复
我感觉问题出在这里:
LOOP=`expr $LOOP + 1`
在计算后给LOOP重新赋值时如果被中断就会出问题。
具体就说不清了...
tom2zhang 2003-10-13
  • 打赏
  • 举报
回复
不知道到底为什么会这样。你有什么设想么?
linaxing 2003-10-10
  • 打赏
  • 举报
回复
先给你纠正一个错误:
while 1>0,shell里不这么写,可以写成while :
,我试了一下,果真如此,有时候这个数还取不到。
不知道什么原因,但是我将循环部分改成这样:
while :
do
LOOP=`expr $LOOP + 1`
echo $LOOP
sleep 1
done

后好像就没有问题了,费解!
linaxing 2003-10-10
  • 打赏
  • 举报
回复
我跟踪了一下,出现你说的那种情况时有以下输出:
。。。
++ expr 198 + 1
+ LOOP=199
+ echo 199
199
+ :
?++ my_exit
+++ echo 'now you will exit, the number is |199|'
+++ echo bye
+++ exit 0
+ LOOP=now you will exit, the number is |199|
bye
++ my_exit
++ echo 'now you will exit, the number is |now you will exit, the number is |199
|
bye|'
now you will exit, the number is |now you will exit, the number is |199|
bye|
++ echo bye
bye
++ exit 0

LOOP被莫名其妙的赋值了:LOOP=now you will exit, the number is |199|
你上面的修改也会有这种情况,只是被赋值的变成了FOO,而你输出的是LOOP,所以结果是
正确的。

具体情况你可以打开set -x跟踪一下。
tom2zhang 2003-10-10
  • 打赏
  • 举报
回复
首先谢谢你
我改成如下形式也没有问题了
while :
do
FOO=`expr $LOOP + 1`
LOOP=$FOO
echo $LOOP
done
可是不知道问题究竟问什么产生。请高手继续指教。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧