设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
Linux 综合讨论区 —— LinuxSir.cn
›
shell进阶应用、shell编程
›
一个FTP界面的脚本
返回列表
查看:
1801
|
回复:
8
一个FTP界面的脚本
[复制链接]
kiron
kiron
当前离线
积分
1261
IP卡
狗仔卡
发表于 2003-8-16 20:07:38
|
显示全部楼层
|
阅读模式
这个暑假学的shell,本来这个脚本是想要庆祝我的第一百大帖的,结果搞了几天还是没有发现错在哪里,我查了许多书也没有搞定,只好来请教大家了。拜托了,不要让我的第一个孩子胎死腹中啊。。。
#!/bin/bash
#auto_ftp
#this script will loaddown the file from the site at the time you want.
#this part for center show
#这是用来显示在中间文本的,利用屏幕列数减去字符数再除2得到定位光标
center()
{
_row=$1
_txt=$2
_oldcol=`echo $_txt|wc -L`
_allcol=`tput cols`
_leftcol=`expr $_allcol - $_oldcol`
_col=`expr $_leftcol / 2`
tput cup $_row $_col
echo $_txt
}
#this part for set colour
#这是定义几种颜色的函数。
color()
{
case $1 in
balck_red)
echo -e "\033[40;31m"
;;
blue_red)
echo -e "\033[44;31m"
;;
blue_green)
echo -e "\033[44;32m"
;;
black_green)
echo -e "\033[40;32m"
;;
red_green)
echo -e "\033[45;32m"
;;
*)echo -e "\033[40;37m"
;;
esac
}
#this part for head screen
#这个函数用来定义屏幕菜单的头部
head()
{
tput clear
color black_green
center 1 "========================================================================"
color blue_green
_all_cols=`tput cols`
center 2 "This Screen For Set Ftp"
center 4 "=================================================================="
}
#this part for end screen
#这个函数用来显示屏幕菜单的尾部
end()
{
color blue_green
center 19 "=================================================================="
xy 20 1
color red_green
echo "tatus:"
color black_green
center 24 "========================================================================"
}
#this part for set x,y
#这个函数定位光标
xy()
{
_row=$1
_col=$2
tput cup $_row $_col
}
#this part for set x,y and show
#这个函数用来定义在某个位置起显示一段文本
xyshow()
{
xy $1 17
echo -e -n $2
}
#this part for status message
#这个函数在菜单的尾部的一个status行下显示提示信息,把21,22,23行三的内 #容当作显示信息的部分,每次显示时清这三行内容并显示新的提示,最后光标
#位回原来的位置
statusshow()
{
tput sc
xy 23 1
xy 22 1
xy 21 1
echo $1
tput rc
}
#Are you sure your enter?
#这个函数用来确定输入,想修改错误则按N返回修改,按Y则确定输入,如果 其#他的字符则提示键入Y或N,并重新输入
yousure()
{
while :
do
_line=$1
xyshow $_line "Are You Sure?[Y..N]:"
read ANS
case $ANS in
y|Y|Yes|YES|yes)
return 1
break
;;
n|N|no|N0|No)
return 0
break
;;
*)
statusshow "The answer must be Yes or No!!"
continue
;;
esac
done
}
#main
tput clear
head
end
while :
do
xyshow 6 "Enter the site:"
read SITE #键入要连接的站点
yousure 7 #在第七行显示是否确定输入站点正确
if [ $? = 1 ]
then
break
else
continue
fi #不正确则返回修正,正确则继续
done
while :
do
xyshow 8 "Enter the logname:" #键入登录名
read USERS
yousure 9
if [ $? = 1 ]
then
break
else
continue
fi
done
while :
do
xyshow 10 "Enter your password:" #銉入密码
read PASSWORD
yousure 11
if [ $? = 1 ]
then
break
else
continue
fi
done
while :
do
xyshow 12 "Enter tarnsport moden[A)scii B)inary]:"
read AODEN #键入传输类型
yousure 13
if [ $? =0 ]
then
continue
fi
case $AODEN in
a|A|ascii|ASCII|Ascii)
MODE=ascii
break
;;
B|b|binary|Binary|BINARY)
MODE=binary
break
;;
*)
statusshow "Please Enter moden A)scii or B)inary!!"
continue
;;
esac
done
echo $MODE
while :
do
xyshow 14 "You want to download or upload file[D)ownload U)pload]:"
read CHOICE #銉入是上传还是要下载
yousure 15
if [ $? = 0 ]
then
continue
fi
case $CHOICE in
U|u|upload|Upload|UPLOAD) #选择上传就执行以下的
while :
do
xyshow 16 "Enter the path of file you want to upload:" #这是要求键入上传的本地文件路径
read FPATH
find FPATH >/dev/null 2>&1 #测试本地 #件是否存在或是可读
if [ $? = 0 -a -r $FPATH ]
then
statusshow "The file is not exist or cannot read!!" #测试失败则提示信息
continue
fi
statusshow "" #清提示栏信息
while :
do
xyshow 16 "which path of directory you want upload:" #提示要上传到的远程站点目录
read RPATH
yousure 17
if [ $? = 0 ]
then
continue
else
break
fi
done
break
done
statusshow "Wait..."
#用<<给ftp传送命令参数,这部分可能是重点的错误内
#吧,我查找了许多的内容,搜索了一些网上的关于ftp的内容也是不知道错在 #哪里?
ftp -i -n $SITE >/dev/null 2>&1 <<ALLFTP
$MODE
user $USERS $PASSWORD
put $FPATH $RPATH
bye
ALLFTP
break
;;
D|d|download|Download|DOWNLOAD)#选择下载执行以下
while :
do
xyshow 16 "Enter path of the file you want to download:"
#这里键入下载的远程站点的文件路径
read RPATH
yousure 17
if [ $? = 0 ]
then
continue
fi
xyshow 16 "which path you want to save the file?:" #这里键入要把下载的文件保存到的目录
read $FPATH
yousure 17
if [ $? = 0 ]
then
continue
fi
break
done
statusshow "wait..."
#这里大概也是重点的错误对象了,和上传的原意一样,用<<给ftp传送命令
ftp -i -n $SITE 2>&1 <<ALLFTP
user $USERS $PASSWORD
$MODE
get $RPATH $FPATH/$RPATH
bye
ALLFTP
break
;;
*)
statusshow "Please Enter D)ownload or U)pload!!"
continue
;;
esac
done
复制代码
过几天我就回学校了,回去就没有这么多时间来搞这个了,所以要赶紧发帖解决。
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2003-8-17 00:46:21
|
显示全部楼层
恭喜兄弟的第100帖!!!
回复
支持
反对
使用道具
举报
显身卡
kiron
kiron
当前离线
积分
1261
IP卡
狗仔卡
楼主
|
发表于 2003-8-17 19:23:55
|
显示全部楼层
同喜同喜!!!
虽然现在孩子还在难产中。。。。。
回复
支持
反对
使用道具
举报
显身卡
lucida
lucida
当前离线
积分
2492
IP卡
狗仔卡
发表于 2003-8-17 19:26:02
|
显示全部楼层
晕啊。。小声问一句,写这个有什么实际价值么?
回复
支持
反对
使用道具
举报
显身卡
kiron
kiron
当前离线
积分
1261
IP卡
狗仔卡
楼主
|
发表于 2003-8-17 19:30:42
|
显示全部楼层
最初由 penny 发表
晕啊。。小声问一句,写这个有什么实际价值么?
太大的价值我想没有,可以为一些懒得打命令的人提供一个界面
另外,若是你需要每天在同一个站点下载同一个文件,可以把它放在后台每天运行。
其他的价值就没了吧:p
回复
支持
反对
使用道具
举报
显身卡
Glue
Glue
当前离线
积分
3129
IP卡
狗仔卡
发表于 2003-8-17 20:04:07
|
显示全部楼层
可以用 wget --mirror的嘛
再说ftp也可以用.netrc来执行所谓的批处理。
不想它胎死就学学怎么用.netrc吧 ;)
回复
支持
反对
使用道具
举报
显身卡
KornLee
KornLee
当前离线
积分
6960
IP卡
狗仔卡
发表于 2003-8-17 20:16:16
|
显示全部楼层
最初由 penny 发表
晕啊。。小声问一句,写这个有什么实际价值么?
不错的脚本练习嘛
回复
支持
反对
使用道具
举报
显身卡
lucida
lucida
当前离线
积分
2492
IP卡
狗仔卡
发表于 2003-8-17 20:59:34
|
显示全部楼层
practice没必要
基本程序的思路要有,细节的语法问题直接查advance bash scripting guide,程序的用法看man,再就是知道什么程序可以做什么,也许你辛辛苦苦写的东西早有程序实现了(这是一例,还有以前看到的查找昨天日期的script/自动编译kde,gnome的script)。
需要什么就现学吧,这种东西不用忘的很快的(捡起来也快)..
回复
支持
反对
使用道具
举报
显身卡
kiron
kiron
当前离线
积分
1261
IP卡
狗仔卡
楼主
|
发表于 2003-8-17 21:23:49
|
显示全部楼层
真是惭愧
谢谢大家的指引
让我对编程的看法有了一些纠正
:thank
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表