免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2538 | 回复: 3

实在看不出哪的问题了,求助于大家 [复制链接]

论坛徽章:
0
发表于 2011-07-13 18:23 |显示全部楼层
5可用积分
  1. #!/bin/bash

  2. i=0
  3. cat tar.txt | while read line
  4. do
  5.         DIR=`echo $line | awk -F '/' '{print $5"/"$6"/"$7"/"}'`
  6.         sleep 1
  7.         echo $DIR | nc 192.168.0.157 4000
  8.         if [ `echo $?` -eq 0 ]
  9.         then
  10.                 if [ $i -eq 0 ]
  11.                 then
  12.                         echo $line
  13.                         cat $line | nc 192.168.0.157 4001
  14.                         i=1
  15.                 else
  16.                         echo $line
  17.                         cat $line | nc 192.168.0.157 4002
  18.                         i=0
  19.                 fi
  20.         else
  21.                 echo "$?"
  22.         fi
  23. #       rm -rf $line
  24. done
复制代码
上面这个脚本是发送文件的脚本,tar.txt文件是这样的
  1. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2008/2008wk53.tar.bz2
  2. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2009/2009wk47.tar.bz2
  3. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2009/2009wk48.tar.bz2
  4. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2009/2009wk50.tar.bz2
  5. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2009/2009wk51.tar.bz2
  6. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2009/2009wk52.tar.bz2
  7. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2009/2009wk53.tar.bz2
  8. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2009/2009wk31.tar.bz2
  9. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2009/2009wk30.tar.bz2
  10. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2009/2009wk23.tar.bz2
  11. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2009/2009wk27.tar.bz2
  12. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2009/2009wk17.tar.bz2
复制代码
下面是接收文件的脚本
  1. #!/bin/bash

  2. basedir='/data/text'

  3. function nc_sub1() {
  4.         path=`nc -l 4000`
  5.         [ -d $basedir/$path ] || mkdir -p $basedir/$path
  6.         P=$basedir/$path
  7.         echo "nc_sub1"
  8.         nc -l 4001 | tar -xjvf - -C $P
  9.         nc_sub2
  10. }
  11. function nc_sub2() {
  12.         path=`nc -l 4000`
  13.         [ -d $basedir/$path ] || mkdir -p $basedir/$path
  14.         P=$basedir/$path
  15.         echo "nc_sub2"
  16.         nc -l 4002 | tar -xjvf - -C $P
  17.         nc_sub1
  18. }
  19. nc_sub1
复制代码

第一个脚本的作用是发送tar包给第二个主机
第二个脚本的作用是接收发送过来的tar包并且解压到指定目录
现在的问题是,脚本无法解压tar包,并且在打印出第一行的文件路径之后,后面的就不停的打印“1”,也就是进入了第一个脚本的第一个“if”语句的“else”分支
求解为什么会这样


输出结果如图
  1. /mnt_solr/weeklyupdate/organized/US_MAPS/APP/2008/2008wk53.tar.bz2
  2. 1
  3. 1
  4. 1
  5. 1
  6. 1
复制代码

论坛徽章:
0
发表于 2011-07-13 19:38 |显示全部楼层
本帖最后由 shplpy 于 2011-07-13 19:47 编辑

回复 1# breeze7086


    兄弟,俺真没看出哪有问题
看看还有其他的线索提供没

出现你提供的输出结果的原因可能是,cat $line | nc 192.168.0.157 4001 第一次传输tar包时,接收端脚本像你说的没法解压tar包,导致接收脚本异常退出,那么接下来的再传输其他tar包时,由于没有4000端口监听,返回值为1,直接跳入else子句,打印$?,即1

论坛徽章:
0
发表于 2011-07-14 10:53 |显示全部楼层
问题解决了...
两个sleep搞定,原因是接收文件的主机端口还未打开,发送的还在发导致
具体把sleep加在哪,有兴趣的可以自己做下实验
ps:里面冗余代码都是实在找不到问题所尝试的“一切可能”。。。
问题解决了就好

论坛徽章:
0
发表于 2011-07-14 12:43 |显示全部楼层
把某条语句放在后台一样可以解决问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP