用户名: 密码: 忘记密码? 注册
收藏此问题 发表新评论

expect scp 数据不完整

本帖最后由 风吹不倒 于 2010-07-13 16:34 编辑

写了个脚本,创建任务列表,包含ip password;expect读取列表内容作为参数,scp数据包;创建管道,并发执行expect

当数据包比较大的时候,传过去会不完整。

不是所有,只有其中几台偶尔会有问题,会是什么问题呢?会不会是用了并发的原因?
  1. #!/bin/bash

  2. dir=$3
  3. file="`echo $1|sed 's#,# #g'`"


  4. #匹配站点名,打印任务列表
  5. for x in `echo $2|sed 's/,/ /g'`
  6. do
  7. IFS=$'\n'
  8. case $x in
  9. huabei)
  10.         for i in `sed -n "/huabei/p" ip`
  11.         do
  12.                 echo 22 $i >> list
  13.         done
  14. ;;
  15. dongbei)
  16.         for i in `sed -n "/dongbei/p" ip`
  17.         do
  18.                 echo 33 $i >> list
  19.         done
  20. ;;
  21. *)
  22.         for i in `sed -n "/$x/p" ip`
  23.         do
  24.                 echo 44 $i >> list
  25.         done
  26. ;;
  27. esac
  28. done

  29. #expect内容 将文件名替换进去
  30. echo   '#!/usr/local/bin/expect

  31.         set p [lindex $argv 0]
  32.         set i [lindex $argv 1]
  33.         set d [lindex $argv 2]
  34.         set pw [lindex $argv 3]

  35.         spawn /usr/bin/scp -P$p '"$file"' username@$i:$d/
  36.         set timeout -1
  37.         expect {
  38.                 "Connection refused" {exit 2}
  39.                 "(yes/no)?" {send  "yes\r";exp_continue}
  40.                 "password:" {send "$pw\r";exp_continue}
  41.                 "*Permission denied*" {exit 1}
  42.                 "*100%*" {exit 6}
  43.                 }
  44.         ' > chuanbao_exp

  45. #函数内容:取出list文件五项内容,执行expect
  46. exp()   {
  47.          IFS=$' \t'
  48.          set `echo $w`

  49.          
  50.          expect chuanbao_exp $1 $4 $dir $5 1>/dev/null 2>&1

  51.          case $? in
  52.                   6)
  53.                   echo -e "\033[36m正在上传文件至$2-$3\033[0m\n\033[32mSuccessful!!! \033[0m"
  54.                   ;;
  55.                   1)
  56.                   echo -e "\033[36m正在上传文件至$2-$3\033[0m\n\033[31;1mPermission denied \033[0m"
  57.                   ;;
  58.                   2)
  59.                   echo -e "\033[36m正在上传文件至$2-$3\033[0m\n\033[31;1mConnection refused \033[0m"
  60.                   ;;
  61.                   0)
  62.                   echo -e "\033[36m正在上传文件至$2-$3\033[0m\n\033[31;1m其它错误 \033[0m"
  63.                   ;;
  64.           esac
  65.         }



  66. #设置管道,设定并发数,执行任务
  67. mkfifo tmpfile
  68. exec 4<>tmpfile
  69. rm tmpfile

  70. thred=10
  71. {
  72. for ((c=1;c<=${thred};c++))
  73. do
  74.         echo
  75. done
  76. } >&4

  77. for w in `cat list`
  78. do
  79.         (exp;echo >&4) &
  80. done <&4
  81. wait
  82. exec 4>&-

  83. #删除临时文件
  84. rm -f {chuanbao_exp,list}
复制代码
ip文件格式
站点名 服务器名 ip password
昵称: 风吹不倒  时间: 2010-07-13 14:36:00
楼主给的数据也不完整
昵称: where27  时间: 2010-07-13 15:49:00
回复 where27


    去掉了些检查判断,贴上了,帮看看
昵称: 风吹不倒  时间: 2010-07-13 16:16:00
发表评论
昵称:
内容:
验证: