LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1799|回复: 8

一个FTP界面的脚本

[复制链接]
发表于 2003-8-16 20:07:38 | 显示全部楼层 |阅读模式
这个暑假学的shell,本来这个脚本是想要庆祝我的第一百大帖的,结果搞了几天还是没有发现错在哪里,我查了许多书也没有搞定,只好来请教大家了。拜托了,不要让我的第一个孩子胎死腹中啊。。。

  1. #!/bin/bash
  2. #auto_ftp
  3. #this script will loaddown the file from the site at the time you want.

  4. #this part for center show
  5. #这是用来显示在中间文本的,利用屏幕列数减去字符数再除2得到定位光标
  6. center()
  7. {
  8. _row=$1
  9. _txt=$2
  10. _oldcol=`echo $_txt|wc -L`
  11. _allcol=`tput cols`
  12. _leftcol=`expr $_allcol - $_oldcol`
  13. _col=`expr $_leftcol / 2`
  14. tput cup $_row $_col
  15. echo $_txt
  16. }

  17. #this part for set colour
  18. #这是定义几种颜色的函数。
  19. color()
  20. {
  21. case $1 in
  22. balck_red)
  23. echo -e "\033[40;31m"
  24. ;;
  25. blue_red)
  26. echo -e "\033[44;31m"
  27. ;;
  28. blue_green)
  29. echo -e "\033[44;32m"
  30. ;;
  31. black_green)
  32. echo -e "\033[40;32m"
  33. ;;
  34. red_green)
  35. echo -e "\033[45;32m"
  36. ;;
  37. *)echo -e "\033[40;37m"
  38. ;;
  39. esac
  40. }

  41. #this part for head screen
  42. #这个函数用来定义屏幕菜单的头部
  43. head()
  44. {
  45. tput clear
  46. color black_green
  47. center 1 "========================================================================"
  48. color blue_green
  49. _all_cols=`tput cols`
  50. center 2 "This Screen For Set Ftp"
  51. center 4 "=================================================================="
  52. }

  53. #this part for end screen
  54. #这个函数用来显示屏幕菜单的尾部
  55. end()
  56. {
  57. color blue_green
  58. center 19 "=================================================================="
  59. xy 20 1
  60. color red_green
  61. echo "tatus:"
  62. color black_green
  63. center 24 "========================================================================"
  64. }
  65.        
  66. #this part for set x,y
  67. #这个函数定位光标
  68. xy()
  69. {
  70. _row=$1
  71. _col=$2
  72. tput cup $_row $_col
  73. }

  74. #this part for set x,y and show
  75. #这个函数用来定义在某个位置起显示一段文本
  76. xyshow()
  77. {
  78. xy $1 17
  79. echo -e -n $2
  80. }

  81. #this part for status message
  82. #这个函数在菜单的尾部的一个status行下显示提示信息,把21,22,23行三的内 #容当作显示信息的部分,每次显示时清这三行内容并显示新的提示,最后光标
  83. #位回原来的位置
  84. statusshow()
  85. {
  86. tput sc
  87. xy 23 1
  88. xy 22 1
  89. xy 21 1
  90. echo $1
  91. tput rc
  92. }

  93. #Are you sure your enter?
  94. #这个函数用来确定输入,想修改错误则按N返回修改,按Y则确定输入,如果 其#他的字符则提示键入Y或N,并重新输入
  95. yousure()
  96. {
  97. while :
  98. do
  99.         _line=$1
  100.         xyshow $_line "Are You Sure?[Y..N]:"
  101.         read ANS
  102.         case $ANS in
  103.                 y|Y|Yes|YES|yes)
  104.                 return 1
  105.                 break
  106.                 ;;
  107.                 n|N|no|N0|No)
  108.                 return 0
  109.                 break
  110.                 ;;
  111.                 *)
  112.                 statusshow "The answer must be Yes or No!!"
  113.                 continue
  114.                 ;;
  115.         esac
  116. done
  117. }

  118. #main
  119. tput clear
  120. head
  121. end

  122. while :
  123. do
  124. xyshow 6 "Enter the site:"
  125. read SITE    #键入要连接的站点
  126. yousure 7     #在第七行显示是否确定输入站点正确
  127. if [ $? = 1 ]
  128. then
  129.         break
  130. else
  131.         continue
  132. fi        #不正确则返回修正,正确则继续
  133. done

  134. while :
  135. do
  136. xyshow 8 "Enter the logname:"   #键入登录名
  137. read USERS
  138. yousure 9
  139. if [ $? = 1 ]
  140. then
  141.         break
  142. else
  143.         continue
  144. fi
  145. done

  146. while :
  147. do
  148.         xyshow 10 "Enter your password:"    #銉入密码
  149.         read PASSWORD
  150.         yousure 11
  151.         if [ $? = 1 ]
  152.                 then
  153.                         break
  154.                 else   
  155.                         continue
  156.         fi
  157. done

  158. while :
  159. do
  160.         xyshow 12 "Enter tarnsport moden[A)scii B)inary]:"
  161.         read AODEN      #键入传输类型
  162.         yousure 13
  163.         if [ $? =0 ]
  164.         then
  165.                 continue
  166.         fi
  167.         case $AODEN in
  168.                 a|A|ascii|ASCII|Ascii)
  169.                 MODE=ascii
  170.                 break
  171.                 ;;
  172.                 B|b|binary|Binary|BINARY)
  173.                 MODE=binary
  174.                 break
  175.                 ;;
  176.                 *)
  177.                 statusshow "Please Enter moden A)scii or B)inary!!"
  178.                 continue
  179.                 ;;
  180.         esac
  181. done

  182. echo $MODE

  183. while :
  184. do
  185.         xyshow 14 "You want to download or upload file[D)ownload U)pload]:"
  186.         read CHOICE     #銉入是上传还是要下载
  187.         yousure 15
  188.         if [ $? = 0 ]
  189.         then
  190.                 continue
  191.         fi
  192.         case $CHOICE in
  193.                 U|u|upload|Upload|UPLOAD)  #选择上传就执行以下的
  194.                 while :
  195.                 do
  196.                         xyshow 16 "Enter the path of file you want to upload:"   #这是要求键入上传的本地文件路径
  197.                         read FPATH
  198.                         find FPATH >/dev/null 2>&1  #测试本地 #件是否存在或是可读
  199.                         if [ $? = 0 -a -r $FPATH ]
  200.                         then
  201.                                 statusshow "The file is not exist or cannot read!!"   #测试失败则提示信息
  202.                                 continue
  203.                         fi
  204.                         statusshow ""   #清提示栏信息
  205.                         while :
  206.                         do
  207.                                 xyshow 16 "which path of directory you want upload:"     #提示要上传到的远程站点目录
  208.                                 read RPATH
  209.                                 yousure 17
  210.                                 if [ $? = 0 ]
  211.                                 then
  212.                                         continue
  213.                                 else
  214.                                         break
  215.                                 fi
  216.                         done
  217.                         break
  218.                 done
  219.                 statusshow "Wait..."
  220.                      #用<<给ftp传送命令参数,这部分可能是重点的错误内
  221. #吧,我查找了许多的内容,搜索了一些网上的关于ftp的内容也是不知道错在  #哪里?
  222.                 ftp -i -n $SITE >/dev/null 2>&1 <<ALLFTP
  223.                 $MODE
  224.                 user $USERS $PASSWORD
  225.                 put $FPATH $RPATH
  226.                 bye
  227. ALLFTP
  228. break
  229. ;;
  230.                 D|d|download|Download|DOWNLOAD)#选择下载执行以下
  231.                 while :
  232.                 do
  233.                         xyshow 16 "Enter path of the file you want to download:"
  234. #这里键入下载的远程站点的文件路径
  235.                         read RPATH
  236.                         yousure 17
  237.                         if [ $? = 0 ]
  238.                         then
  239.                                 continue
  240.                         fi
  241.                         xyshow 16 "which path you want to save the file?:"   #这里键入要把下载的文件保存到的目录
  242.                         read $FPATH
  243.                         yousure 17
  244.                         if [ $? = 0 ]
  245.                         then
  246.                                 continue
  247.                         fi
  248.                         break
  249.                 done
  250.                 statusshow "wait..."
  251. #这里大概也是重点的错误对象了,和上传的原意一样,用<<给ftp传送命令
  252.                 ftp -i -n $SITE 2>&1 <<ALLFTP
  253.                 user $USERS $PASSWORD
  254.                 $MODE
  255.                 get $RPATH $FPATH/$RPATH
  256.                 bye
  257. ALLFTP
  258. break
  259.                 ;;
  260.                 *)
  261.                 statusshow "Please Enter D)ownload or U)pload!!"
  262.                 continue
  263.                 ;;
  264.         esac
  265. done
复制代码


过几天我就回学校了,回去就没有这么多时间来搞这个了,所以要赶紧发帖解决。
发表于 2003-8-17 00:46:21 | 显示全部楼层
恭喜兄弟的第100帖!!!
 楼主| 发表于 2003-8-17 19:23:55 | 显示全部楼层
同喜同喜!!!

虽然现在孩子还在难产中。。。。。
发表于 2003-8-17 19:26:02 | 显示全部楼层
晕啊。。小声问一句,写这个有什么实际价值么?
 楼主| 发表于 2003-8-17 19:30:42 | 显示全部楼层
最初由 penny 发表
晕啊。。小声问一句,写这个有什么实际价值么?


太大的价值我想没有,可以为一些懒得打命令的人提供一个界面
另外,若是你需要每天在同一个站点下载同一个文件,可以把它放在后台每天运行。
其他的价值就没了吧:p
发表于 2003-8-17 20:04:07 | 显示全部楼层
可以用 wget --mirror的嘛
再说ftp也可以用.netrc来执行所谓的批处理。
不想它胎死就学学怎么用.netrc吧 ;)
发表于 2003-8-17 20:16:16 | 显示全部楼层
最初由 penny 发表
晕啊。。小声问一句,写这个有什么实际价值么?

不错的脚本练习嘛
发表于 2003-8-17 20:59:34 | 显示全部楼层

practice没必要

基本程序的思路要有,细节的语法问题直接查advance bash scripting guide,程序的用法看man,再就是知道什么程序可以做什么,也许你辛辛苦苦写的东西早有程序实现了(这是一例,还有以前看到的查找昨天日期的script/自动编译kde,gnome的script)。

需要什么就现学吧,这种东西不用忘的很快的(捡起来也快)..
 楼主| 发表于 2003-8-17 21:23:49 | 显示全部楼层
真是惭愧
谢谢大家的指引
让我对编程的看法有了一些纠正
:thank
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表