关于echo 不显示的一个问题

zhqyzhqychn 2009-02-26 09:59:06

#!/bin/sh
loop=0
sig_int()
{
echo " interrupt signal was catched "
echo "the loop is $loop"
exit 0
}
trap "sig_int" 2
while :
do
loop=`expr $loop + 1 `
done


一个简单的shell脚本,一个死循环对loop进行自增,然后捕获SIGINT然后打印loop的值,但是最后有时候显示不出来loop的值
有时候则可以,不知道是什么原因。
...全文
389 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2009-03-07
  • 打赏
  • 举报
回复
楼上说的原因是对的,也可以试试下面的方法。
因为 (( loop++ )) 的语法Bourne shell并不支持,虽然 (( loop++ )) 比用expr快的多。

#!/bin/sh

sig_int()
{
echo " interrupt signal was catched "
echo "the loop is $loop"
exit 0
}

trap "sig_int" 2

loop=1
while true
do
count=`expr $loop + 1`
loop=$count
done
fox000002 2009-03-06
  • 打赏
  • 举报
回复
应该是 loop=`expr $loop + 1` 操作在中间被终止,导致了 loop 值的丢失

下面这个倒没问题

#!/bin/sh
loop=1

sig_int()
{
echo " interrupt signal was catched "
echo "the loop is $loop"
exit 0
}

trap "sig_int" 2

while :
do
(( loop++ ))
done
zhqyzhqychn 2009-03-06
  • 打赏
  • 举报
回复
没人呢
xhy_851221 2009-02-27
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
帮up

23,121

社区成员

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

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