免费注册 查看新帖 |

Chinaunix

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

有关变量生命期的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-24 18:07 |只看该作者 |倒序浏览
变量的生命期到底是怎么定义的,例如 下边的代码,在while外边定义的 flag=0, 在while循环读文件中将 flag变为了1 , 但是最后显示OK ,flag的值并没有改变,感觉是变量生命期的原因,跟while有关,希望大家能给我说明下问题在哪,为什么while中给flag附值,但是出了while flag 赋值无效了

#!/bin/sh
flag=0
file=test.txt
type=A

while read line
do
   case  $type in
   A) name="X"
       ;;
   B) name="Y"
       ;;
   *);;
   esac

   if [ "$name" = "X" ]
   then
      flag=1
   fi

done < $file

if [ "$flag" = "1" ]
then echo "Err"
else echo "OK"
fi

论坛徽章:
0
2 [报告]
发表于 2009-03-24 18:48 |只看该作者
应该是test.txt不存在或者为空。

如果正确进入循环,应该没问题。


  1. [root@bj_manager test]# ls | grep test.txt
  2. test.txt
  3. [root@bj_manager test]# cat test.sh
  4. #!/bin/sh
  5. flag=0
  6. file=test.txt
  7. type=A

  8. while read line
  9. do
  10.    case  $type in
  11.    A) name="X"
  12.        ;;
  13.    B) name="Y"
  14.        ;;
  15.    *);;
  16.    esac

  17.    if [ "$name" = "X" ]
  18.    then
  19.       flag=1
  20.    fi

  21. done < $file

  22. if [ "$flag" = "1" ]
  23. then echo "Err"
  24. else echo "OK"
  25. fi
  26. [root@bj_manager test]# ./test.sh
  27. Err
  28. [root@bj_manager test]#
复制代码

论坛徽章:
0
3 [报告]
发表于 2009-03-24 18:50 |只看该作者
楼主自己调试调试脚本吧,没有这样的说法,变量会自动消失?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2009-03-25 08:51 |只看该作者

回复 #1 bairb2008 的帖子

exec 3<$file
while read line <&3
do
   case  $type in
   A) name="X"
       ;;
   B) name="Y"
       ;;
   *);;
   esac

   if [ "$name" = "X" ]
   then
      flag=1
   fi

done

这样试试,如果你用了老掉牙的sh

论坛徽章:
0
5 [报告]
发表于 2009-03-25 11:09 |只看该作者
原帖由 ywlscpl 于 2009-3-24 18:50 发表
楼主自己调试调试脚本吧,没有这样的说法,变量会自动消失?

你可以试试,在while里给一个新的变量赋值,然后在while外引用,你看值一样不

论坛徽章:
0
6 [报告]
发表于 2009-03-25 11:14 |只看该作者

回复 #5 bairb2008 的帖子

我测试了一下,是可以得到值的,说一下你的系统以及shell版本吧
[test@ ~ ] $ sh -x 1
+ flag=0
+ file=test.txt
+ type=A
+ read line
+ case $type in
+ name=X
+ '[' X = X ']'
+ flag=1
+ read line
+ case $type in
+ name=X
+ '[' X = X ']'
+ flag=1
+ read line
+ case $type in
+ name=X
+ '[' X = X ']'
+ flag=1
+ read line
+ case $type in
+ name=X
+ '[' X = X ']'
+ flag=1
+ read line
+ '[' 1 = 1 ']'
+ echo Err
Err

论坛徽章:
0
7 [报告]
发表于 2009-03-25 12:53 |只看该作者
原帖由 kwokcn 于 2009-3-24 18:48 发表
应该是test.txt不存在或者为空。

如果正确进入循环,应该没问题。


kwokcn已经说过了,楼主的test.txt文件都没贴出来

要么就这么测试
var=1   
while [ $var -lt 3 ]
do
   var=`expr $var + 1`
done
echo $var

看下有没有输出3就是
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP